标签:1051 sequence stl Pop NO pop int numbers stack
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 2
Sample Output:
YES
NO
NO
YES
NO
/**
本题题意
就是 输入 m , n, k 分别表示一个栈中能装入的最大容量,n 表示 入栈的顺序为 1 - n, k表示 一共有k
个序列此时需要判断 k个序列 通过 1 - n 的入栈顺序能否实现.
本题思路:
设定一个b数组存放规定的序列, 设定一个下标j 指向b数组的首元素,比较b[j] 和 s.top()(栈顶元素)
是否相等, 相等就 s.pop(), b[j++].
最后判断栈中元素为空那么此序列就正确, 就可以输出yes;
**/
值得注意的是 :如果栈中元素为空, s.top() 会出现错误。 因此要作空判断.
#include<iostream>
#include<stack>
using namespace std;
int n, m, k, num, b[1005];
int main(){
stack<int> s;
scanf("%d%d%d", &m, &n, &k);;
while(k--){
int j = 0;
while(!s.empty())
s.pop();
for(int i = 0; i < n; i++){
scanf("%d", &num);
b[i] = num;
}
for(int i = 1; i <= n; i++){
s.push(i);
if(s.size() > m)
break;
while(!s.empty() && s.top() == b[j]){ //s.empty() 是必须加上判断的
s.pop();
j++;
}
}
if(!s.empty())
printf("NO\n");
else
printf("YES\n");
}
return 0;
}
标签:1051,sequence,stl,Pop,NO,pop,int,numbers,stack 来源: https://blog.csdn.net/qq_41698081/article/details/94454576
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。