Sicily Rails
【题意】
有个车站,车站有个中转的地方,车厢可以往里面开,其实就是个栈,A方向开来一列火车,车厢序号为1……N,给出一个车厢序列B,求能不能通过这个栈,把A序列变成B序列。
1 #include<iostream> 2 #include<queue> 3 #include<stack> 4 using namespace std; 5 int main() 6 { 7 int t; 8 while(cin>>t && t!=0) 9 { 10 int x; 11 while(cin>>x) 12 { 13 queue<int> q; 14 if(x==0) 15 {cout<<endl;break;} 16 int a[t]; 17 a[0] = x; 18 19 for(int i=1;i<t;i++) 20 cin>>a[i]; 21 22 for(int p=1; p<=t; p++) 23 q.push(p); 24 25 stack<int> s; 26 27 bool flag = true; 28 for(int i=0;i<t;i++) 29 { 30 if(!q.empty() && q.front() == a[i]) 31 q.pop(); 32 else if(!s.empty() && s.top() == a[i]) 33 s.pop(); 34 else if(!q.empty() && q.front() < a[i]) 35 {s.push(q.front());q.pop();i--;} 36 else 37 {flag = false;break;} 38 } 39 if(flag) 40 cout<<"Yes"<<endl; 41 else 42 cout<<"No"<<endl; 43 } 44 } 45 //system("pause"); 46 }