[poj] 1363 Rails
【题目】http://poj.org/problem?id=1363
【题意】判断是否能通过栈将顺序列转化为相应队列
【算法】栈模拟
【题解】将未进栈的元素直接输出,之前的元素进栈;判断进栈的元素是不是栈顶,若在栈顶则出栈,反之该队列无法得到。
【注意】标记进栈元素所在栈的位置和元素是否进栈。
注意输出格式
【测试】
无
【代码】
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[10000];
int main(){
int N,i,x,j,k,t;
while(scanf("%d",&N)&&N!=0){
while(scanf("%d",&x)&&x!=0){
for(i=1;i<=N;i++)a[i]=-1;
a[x]=-2;
k=0;
for(j=1;j<x;j++){
if(a[j]==-1){
a[j]=k;
k++;
}
}
t=1;
for(i=1;i<N;i++){
scanf("%d",&x);
if(t==1){
if(a[x]==-1){
a[x]=-2;
for(j=1;j<x;j++){
if(a[j]==-1){
a[j]=k;
k++;
}
}
}
else if(a[x]==k-1)k--;
else t=0;
}
}
if(t==1)printf("Yes\n");
else printf("No\n");
}
putchar('\n');
}
return 0;
}