1051. Pop Sequence (25)
1051. Pop Sequence (25)
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 2Sample Output:
YES NO NO YES NO
1 #include<cstdio> 2 #include<algorithm> 3 #include<iostream> 4 #include<cstring> 5 #include<queue> 6 #include<vector> 7 #include<cmath> 8 #include<string> 9 #include<map> 10 #include<set> 11 #include<stack> 12 using namespace std; 13 int line[1005]; 14 int main(){ 15 //freopen("D:\\INPUT.txt","r",stdin); 16 int n,m,k; 17 scanf("%d %d %d",&m,&n,&k); 18 int i,j,l,maxnum; 19 for(i=0;i<k;i++){ 20 stack<int> s;//注意初始化 21 maxnum=0; 22 for(j=0;j<n;j++){ 23 scanf("%d",&line[j]); 24 } 25 for(j=0;j<n;j++){ 26 while(line[j]>maxnum){ 27 s.push(++maxnum); 28 } 29 if(s.size()>m){ 30 break; 31 } 32 if(line[j]<=maxnum&&s.top()==line[j]){ 33 s.pop(); 34 } 35 else{ 36 break; 37 } 38 } 39 if(j==n){ 40 printf("YES"); 41 } 42 else{ 43 printf("NO"); 44 } 45 printf("\n"); 46 } 47 return 0; 48 }