PAT A1051 Pop Sequence (25分)

题目大意: 有一个栈,大小为M,数字1~N依次入栈,给出K个出栈序列,判断该序列是否满足出栈要求
思路:基本上还是模拟栈的入栈和出栈过程,要注意对于栈容量k的判断
注意:这道题其实不难,但是要注意虽然是否满足出栈要求这一判断我们在读取一行数据的中间就可以完成但依然要继续读入数据,否则就会发生读取中止导致下一行的读入是这一样未读完的数据,这会造成一些很奇怪的结果

#include <cstdio>
#include <stack>
using namespace std;

const int M = 1010;
const int N = 1010;
const int K = 1010;
stack<int> st;

int main(){
    int m,n,k;
    scanf("%d %d %d",&m,&n,&k);
    int curr;//当前准备输出的数字
    int flag = true;//是否可以得到
    int next = 1;//下一个可以加入的数字,从1开始
    for(int i = 0;i < k;i++){
        while(st.empty()==false) st.pop();
        flag = true;
        next = 1;
        for(int j = 0;j<n;j++){
            scanf("%d",&curr);
            if(st.size()<=m&&next <= curr){//不满
                    while(next<=curr){
                        st.push(next);
                        next++;
                    }
                    if(st.size() > m){//超出限制
                        flag = false;
                        //break; 此处不能break否则会造成一些读取中止的问题
                    }               
            }
            if(st.empty()==false&&st.top()==curr){
                st.pop();
            }else{
                flag = false;
                //break; 此处不能break否则会造成一些读取中止的问题
            }
        }
        if(flag == true) printf("YES\n");
        else printf("NO\n");
    }
}
posted @ 2020-08-31 23:04  是水泵呢  阅读(59)  评论(0编辑  收藏  举报