题目链接:https://www.luogu.org/problemnew/show/UVA514
分析:
入站序列是1-n,入站后判断如果等于出站序列的当前值,则直接出站。否则就在栈里待着不动。模拟即可,可以选择使用STL栈或手写。
代码:
#include<cstdio>
#include <cstring>
#include<stack>
using namespace std;
int a[1005],n,cnt,bh,pd;
int main()
{
while(scanf("%d",&n)&&n!=0)
{
stack<int> s;
while(1)
{
scanf("%d",&a[1]);
if(a[1]==0) break;
for(int i=2;i<=n;i++)
{
scanf("%d",&a[i]);
}
cnt=bh=pd=1;
while(bh<=n)
{
if(cnt==a[bh])
{
cnt++;
bh++;
}
else if(!s.empty()&&s.top()==a[bh])
{
s.pop();
bh++;
}
else if(cnt<=n) s.push(cnt++);
else
{
pd=0;
break;
}
}
printf("%s\n",pd?"Yes":"No");
}
printf("\n");
}
return 0;
}
撒花~