码迷,mamicode.com
首页 > 其他好文 > 详细

Uva514

时间:2019-04-07 21:59:39      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:ret   pop   顺序   lse   int   include   break   mes   return   

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

 1 #include <bits/stdc++.h>
 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的车辆数。用stack<int>s表示C。

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

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

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

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

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

 

Uva514

标签:ret   pop   顺序   lse   int   include   break   mes   return   

原文地址:https://www.cnblogs.com/zuiaimiusi/p/10667226.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!