PAT1051 Pop Sequence
错误
- 每一行数据都必须读完,不能提前break
- 局部变量每次循环要刷新,如stack的初始化要放在第一个for循环之后
- 测试点一不过思考 形如
-
5 7 1 3 7 6 5 4 2 1
#include<cstdio>
#include<cstring>
#include<stack>
using namespace std;
int main(){
int n,m,k;
scanf("%d %d %d",&m,&n,&k);
for (int i = 0; i < k; ++i) {
stack<int> a;
int flag = 1;
int pushCount = 0; //判断temp是否已经入栈,大于temp则已入栈
for (int j = 0; j < n; ++j) {
int temp;
scanf("%d",&temp);
if(temp>n){
flag = 0;
}
if(temp<pushCount){
if(a.top()>temp){
flag = 0;
} else if(a.top()==temp)
a.pop();
}else{
if((temp-pushCount)<=(m-a.size())){//此处必须填成m-size() 否则测试样例1不过,类似5 7 1
// 3 7 6 5 4 2 1
for (int s = 0; s < temp-pushCount; ++s) {
a.push(pushCount+s+1);
}
a.pop();
pushCount = temp;
} else{
flag = 0;
}
}
}
if(flag==0)
printf("NO\n");
if(flag&&pushCount==n&&a.empty())
printf("YES\n");
}
return 0;
}