简单题。
有一个火车站。有n节车厢从 车站A 驶入车站C,按进站顺序依次编号为1~n。
车站C具有栈的性质,其实就是栈。
判断能否借助中转站C使得各车厢按照题目要求的顺序驶入B站。
本题属于栈的基本操作。
第一次认真的去用栈来做题。
#include<stdio.h>
#include<stack>
using namespace std;
const int MAXN=1000+10;
int n, target[MAXN];
int main()
{
while(scanf("%d", &n), n)
{
while(scanf("%d", &target[1]) && target[1])
{
stack<int> s;
int A=1, B=1;
for(int i=2; i<=n; i++)
scanf("%d", &target[i]);
int ok=1;
while(B<=n)
{
if(A==target[B])
{
A++;
B++;
}
else if(!s.empty() && s.top()==target[B])
{
s.pop();
B++;
}
else if(A<=n)
s.push(A++);
else
{
ok=0;
break;
}
}
printf("%s\n", ok?"Yes":"No");
}
printf("\n");
}
return 0;
}