浙江大学のデータ構造授業後、練習問題2-3 Pop Sequence(25分)

4361 ワード

Given a stack which can keep M numberst at most.Push N numbers in the order of 1,2,3,… N and pop randoumly.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 maximm capacity of the stack) N (the length of push sequence)、and K (the number of pop sequences to be checed).The n K lineach 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 
#include 
using namespace std;
int main(){
    //    ,     ,n 
    int maxCapacity,maxNum,line;
    cin>>maxCapacity>>maxNum>>line;
    while(line--){
        stack<int> sta;
        int val[maxNum];int a=0;
        for(int i=0;i){
            cin>>val[i];
        }
        bool no=false;
        for(int i=0;i){
            sta.push(i+1);
            if(sta.size()>maxCapacity){
                no=true;
                break;
            }
            while(!sta.empty()&&val[a]==sta.top()){
                sta.pop();
                a++;
            }
        }
        if(no) cout<<"NO"<<endl;
        else if(sta.empty()) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
    system("pause");
    return 0;
}
 
転載先:https://www.cnblogs.com/littlepage/p/11375366.html