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 }                                 
posted @ 2012-07-15 00:03  mrlaker  阅读(305)  评论(0编辑  收藏  举报