PAT (Advanced Level) Practice A1051 Pop Sequence (25 分)(C++)(甲级)(栈)

版权声明:假装有个原创声明……虽然少许博文不属于完全原创,但也是自己辛辛苦苦总结的,转载请注明出处,感谢! https://blog.csdn.net/m0_37454852/article/details/86665581

原题链接:1051 Pop Sequence

#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
//由于输入序列有规律(1~N),其输出也是有迹可循,可推断出栈中元素个数和输出顺序是否合法
int main()
{
    int M, N, K;
    scanf("%d %d %d", &M, &N, &K);
    for(int i=0; i<K; i++)
    {
        int num = 0, now, last = 0, flag = 0, maxinum = 0;//num为栈中元素个数,maxinum为之前输出的最大值
        for(int j=0; j<N; j++)
        {
            scanf("%d", &now);
            num += now - last - 1;
            maxinum = max(maxinum, last);
            if(num >= M || now < maxinum && now > last) flag = 1;//当前个数大于等于最大容量
            last = now;//或者当前值小于最大值,但大于之前输入值,则不合题意
        }
        if(flag) printf("NO\n");//输出NO
        else printf("YES\n");//否则输出YES
    }
    return 0;
}


猜你喜欢

转载自blog.csdn.net/m0_37454852/article/details/86665581