题目链接: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;
}
撒花
~
转载于:https://www.cnblogs.com/vercont/p/10210023.html
相关资源:JAVA上百实例源码以及开源项目