sicily 1509 Rails 解题总结
summary
:
这题很明显,可以用2个栈来模拟,车进去是一个栈s,然后相当于有一个让道(可以看作 一个栈ss),储存先不出去的车厢。读取输入的车的顺序,放进数组里面,然后s先初始化 一个完整的栈n......2,1。对于输出的车的顺序的每一个元素,先检查的栈顶元素是否与它相 同,再检查ss的栈顶元素是否与它相同,如果都不相同,则s的栈顶元素出栈,继续找下一 元素,如果都找不到,则该顺序不可能产生。
代码:
#include <iostream>
#include <stack>
using namespace std;
const int N = 1001;
int main()
{
unsigned n,a[N];
unsigned i;
while(cin >> n && n){
while(cin >> a[0] && a[0]){
for(i = 1; i < n; i++){
cin >> a[i];
}
stack<int> s;
stack<int> ss;
for(i = n; i > 0; i--){
s.push(i);
}
for(i = 0; i < n; i++){
if(!s.empty() && s.top() == a[i]){
s.pop();
}else if(!ss.empty() && ss.top() == a[i]){
ss.pop();
}else if(!s.empty() && s.top() != a[i]){
while(!s.empty() && s.top() != a[i]){
ss.push(s.top());
s.pop();
}
if(!s.empty())
s.pop();
else
break;
}else{
break;
}
}
if(i == n){
cout << "Yes" << endl;
}else{
cout << "No" << endl;
}
}
cout << endl;
}
return 0;
}