Uva514

https://vjudge.net/problem/UVA-514

 1 #include 
 2 using namespace std;
 3 const int MAXN=1010;
 4 int target[MAXN];
 5 int main()
 6 {
 7     int n,f;
 8     while(scanf("%d",&n)&&n)
 9     {
10         while(1){
11         f=1;
12         stack<int>s;
13         int A=1,B=1;
14         for(int i=1;i<=n;i++)
15          {
16          cin>>target[i];
17          if(target[1]==0)
18          {
19              cout<<endl;
20              f=0;
21              break;
22          }
23          }
24          if(f==0)break;
25         int ok=1;
26         while(B<=n)
27         {
28             if(target[B]==A)
29                 A++,B++;
30             else if(!s.empty()&&s.top()==target[B])
31             {
32                 s.pop();
33                 B++;
34             }
35             else if(A<=n)
36                 s.push(A++);
37             else
38             {
39                 ok=0;
40                 break;
41             }
42         }
43         printf("%s\n",ok?"Yes":"No");
44         }
45     }
46     return 0;
47 }

 

1)栈的应用

用A来代表车厢序号,B代表target数组用来表示列车出站的序号顺序。B用来表示已经驶进B的车辆数。用stacks表示C。

1.A中首元素==B首元素,A直接驶入B;

2.A中首元素!=B首元素,栈首元素==B首元素,栈中首元素出栈;

3.A中首元素!=B首元素,栈首元素!=B首元素,A中元素个数>0,A中元素进入栈;

4.A中首元素!=B首元素,栈首元素!=B首元素,A中元素个数<=0,该解不成立。

2)输入输出的形式奇特,需要多加注意。

 

转载于:https://www.cnblogs.com/zuiaimiusi/p/10667226.html

你可能感兴趣的:(Uva514)