这题对于自己,意义不小,编程能力还是如此之弱!sigh! 用cur标记入栈序列的最大值,逐个扫描出栈序列x,当x与当前栈顶元素不一致(大于或小于)时就将cur++入栈(即使是x大于栈顶元素也将cur++入栈,它必将超过栈容量)。当x与当前栈顶元素一致时,将栈顶元素出栈即可。若栈内元素超过栈容量,则不合法。
AC代码:
#include<iostream>
#include<stack>
using namespace std;
int main()
{
int n,m,k,i,j,x;
//freopen("C:\\Documents and Settings\\Administrator\\桌面\\input.txt","r",stdin);
scanf("%d%d%d",&m,&n,&k);
for(i=0;i<k;i++){
stack<int> c;
int cur=1,fg=1;
for(j=0;j<n;j++){
scanf("%d",&x);
if(fg){
while(c.empty()||c.top()!=x){
c.push(cur);
if(c.size()>m){
fg=0;
break;
}
cur++;
}
if(fg&&c.size()>=1&&c.top()==x)
c.pop();
}
}
if(fg==0)
printf("NO\n");
else printf("YES\n");
}
return 0;
}