Sample Input
5
1 2 3 4 5
5 4 1 2 3
0
6
6 5 4 3 2 1
0
0
Sample Output
Yes
No
Yes
题意:
n节车厢,从A到B,C为一段封死的中转站(栈),从A到C在到B,,输入车厢排列情况,判断正确性。
#include <iostream>
#include <stack>
#define MAXSIZE 1005
using namespace std;
int main()
{
int n;
while(cin>>n&&n)
{
stack<int> s;
int an[MAXSIZE];
while(cin>>an[1]&&an[1])
{
for(int i=2;i<=n;i++)
cin>>an[i];
int a=1,b=1,flag=1;
while(b<=n)
{
if(a==an[b]) { a++;b++;} //从A直接到B
else if(!s.empty()&&s.top()==an[b]) { s.pop();b++;} //从C到B
else if(a<=n) { s.push(a++);} //从A到C
else { flag=0;break;} //不正确的情况
}
if(flag) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
cout<<endl;
}
return 0;
}