• Pop Sequence


    Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and pop randomly. You are supposed to tell if a given sequence of numbers is a possible pop sequence of the stack. For example, if M is 5 and N is 7, we can obtain 1, 2, 3, 4, 5, 6, 7 from the stack, but not 3, 2, 1, 7, 5, 6, 4.

    Input Specification:

    Each input file contains one test case. For each case, the first line contains 3 numbers (all no more than 1000): M (the maximum capacity of the stack), N (the length of push sequence), and K (the number of pop sequences to be checked). Then K lines follow, each contains a pop sequence of N numbers. All the numbers in a line are separated by a space.

    Output Specification:

    For each pop sequence, print in one line "YES" if it is indeed a possible pop sequence of the stack, or "NO" if not.

    Sample Input:

    5 7 5
    1 2 3 4 5 6 7
    3 2 1 7 5 6 4
    7 6 5 4 3 2 1
    5 6 4 3 7 2 1
    1 7 6 5 4 3 2
    

    Sample Output:

    YES
    NO
    NO
    YES
    NO


    #include <bits/stdc++.h>
    using namespace std;
    
    int main(){
        int m,n,k;
        cin>>m>>n>>k;
        while(k--){
            stack<int> s;
            int i=1;
            int a[1005],f=0;
            for(int j=0;j<n;j++){
                cin>>a[j];
                if(f)continue;
                while(i<=n+1){
                    if(s.size()==m){
                        if(s.top()!=a[j])f=1;
                        else s.pop();
                        break;
                    }
                    else if(s.size()<m){
                        if(s.empty())s.push(i++);
                        else{
                            if(s.top()==a[j]){
                                s.pop();break;
                            }
                            else if(s.top()<a[j])
                                s.push(i++);
                            else if(s.top()>a[j]){
                                f=1;break;
                            }
                        }
                    }
                }
    
            }
    
            if(f)cout<<"NO"<<endl;
            else{
                if(s.empty())cout<<"YES"<<endl;
                else cout<<"NO"<<endl;
            }
    
    
        }
    }
    View Code

    卡了一会儿,出现错误现象:数据没输完却输出了完整数量的答案,找了一会错,发现自己f=1后立刻将整个程序break掉了,没让数据输完。

  • 相关阅读:
    是时候把邮件发送时间机动化处理了
    GDUT 初赛 01串也疯狂之光棍也有伴
    通达OA 尝试一下进行通达OA的培训
    不让政府系统用Windows 8,他们用什么?
    Mybatis自动生成插件对数据库类型为text的处理
    Mybatis自动生成插件对数据库类型为text的处理
    js的同步与异步
    js的同步与异步
    js的同步与异步
    Java中的数组与集合
  • 原文地址:https://www.cnblogs.com/xyfs99/p/12933805.html
Copyright © 2020-2023  润新知