设置一个变量tmp,由1开始自增。当栈顶元素与输入的元素不匹配时将当前tmp入栈并tmp自加,当匹配时栈顶出栈。
来源:::http://blog.csdn.net/sup_heaven/article/details/20001385
- #include<stdio.h>
- #include<stack>
- using namespace std;
- int main(){
- int i,j,M,N,K;
- int input,tmp,flag;
- scanf("%d %d %d",&M,&N,&K);
- for(i=0;i<K;i++){
- flag=1;
- stack<int> ss;
- tmp=1;
- for(j=0;j<N;j++){
- scanf("%d",&input);
- while(flag){
- if(ss.empty()||ss.top()!=input){
- ss.push(tmp);
- //printf("push:%d ",ss.top());
- if(ss.size()>M){
- flag=0;
- break;
- }
- tmp++;
- }
- else if(ss.size()>=1&&ss.top()==input){
- //printf("pop:%d\n",ss.top());
- ss.pop();
- break;
- }
- }
- }
- if(ss.size()>0) flag=0;
- if(flag) printf("YES\n");
- else printf("NO\n");
- }
- return 0;
- }
来源http://m.blog.csdn.net/blog/Debrus/38713053
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int N=1005;
int m,len;
int check[N];
bool outside[N];
int main(){
int i,k;
scanf("%d%d%d",&m,&len,&k);
while(k--){
memset(outside,0,sizeof(outside));
for(i=0;i<len;i++)
scanf("%d",&check[i]);
int last=0;
for(i=0;i<len;i++){
//printf("check %d\t",check[i]);
if(outside[check[i]]){//不能输出已经输出过的数
//printf("condition 1\n");
break;
}
if(check[i]-i>m){//要输出这个数所需的栈长 不能超过m
//printf("condition 2\n");
break;
}
if(last!=0&&check[i]<last){//若栈不为空,则不能输出比末尾小的数
//printf("condition 3\n");
break;
}
outside[check[i]]=true;
if(check[i]>last)
last=check[i];
while(outside[last])
last--;
//printf("last=%d\n",last);
}
if(i>=len)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}