题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19641
题目大意:某地有一个火车站,如图,有n节车厢从A驶向B,n节车厢编号1~n,你的任务是能否让他们按照你输入的顺序进入到B方向的铁轨(有点像詹天佑的之字形铁轨)
完全符合栈的后进先出(LAST IN FIRST OUT) 例如出栈顺序54123不可以,但是54321 可以(先从A依次驶入Station,然后5就变成了”车头“,以54321驶出入B);
【代码如下】
#include <iostream> #include <stack> #define maxn 1010 using namespace std; int num[maxn]; int main() { int n; while(cin>>n&&n) { int sign=0; while(1) { stack<int>s; for(int i=1;i<=n;i++) { cin>>num[i]; if(num[1]==0) { sign=1; break; } } if(sign) break; int ok=1; int A=1,B=1;//参照了lrj书上的写法 (A代表每节车厢,B则代表给定出栈顺序的下标) while(B<=n) { if(A==num[B]){A++;B++;} else if(!s.empty()&&s.top()==num[B]){s.pop();B++;} else if (A<=n) {s.push(A++);} else { ok = 0;break;} } if(ok) cout<<"Yes\n"; else cout<<"No\n"; } cout<<"\n"; } return 0; }
时间: 2024-10-20 17:49:01