Uva 514-铁轨 Rails

题目描述

PopPush城市有一座著名的火车站。这个国家到处都是丘陵。而这个火车站是建于上一个世纪。不幸的是,那时的资金有限。所以只能建立起一条路面铁轨。而且,这导致这个火车站在同一个时刻只能一个轨道投入使用,因为它缺少空间,两列火车将无路可走。具体看下图。

 

当地的惯例是每一列火车从A方向驶向B方向时候,会用某种方式将车厢重组。假设火车将要到达A方向,拥有N个车厢(N<=1000),这些车厢按照递增顺序标记为1到N。负责从组车厢的领导,必须知道是否能从组车厢让它驶出B,而这个重组的序列就是a1\a2\a3...aN.帮组他并且写一个程序来判断是否可能按照所要求的车厢顺序。你可以假设,单个的车厢可以从列车上分离出来,在他们进入站台之前。并且他们可以自由移动,知道它们上了B轨道。你也可以假设在任意时候站台可以放下无数的车厢。但是只要一个车厢进入站台,它就不能返回A轨道,同时如果它离开了站台驶向B轨道,它就不能返回站台。

输入:

这个输入文件由多个行块组成。每一个块描述的是多个要求的重组车厢的序列。在这每个块中的第一行是一个整数N,被用来说明上面每行的车厢个数。这个快的最后一行仅仅是一个数字0要来标记该快的结束

最后一个块仅仅是一个0独占一行。

 

输出:

这个输出文件包含多行,这些行和排列车厢的行数一一对应。日过该排列可行,则输出Yes,否则输出No。另外存在一个空行在每个相对应的块后面。输出文件中不存在于最后一个什么数据都没有的响应输出。

 

输出

5

1 2 3 4 5

5 4 1 2 3

0

6

6 5 4 3 2 1

0

0

 

Output

Yes

No

 

Yes

问题分析

本题是简单的栈应用,没有难点,多看,多理解,练习编写。

代码

 1 #include<iostream>
 2 #include<stack>
 3 //#define maxn 1010
 4 using namespace std;
 5 const int maxn=1000+10;
 6  int target[maxn],n;
 7 int main()
 8 {
 9     while(cin>>n&&n)
10     {
11         int a=1,b=1,ok=1;
12         stack<int>s;
13         for(int i=1;i<=n;i++)
14         {
15             cin>>target[i];
16         }
17         while(b<=n)
18         {
19             if(a==target[b]){
20             a++;b++;
21         }
22         else if(!s.empty()&&target[b]==s.top())
23         {
24                 s.pop();
25                 b++;
26         }
27         else if(a<=n)s.push(a++);
28         else {
29             ok=0;break;
30         }
31         }
32
33         cout<<(ok?"yes":"no")<<endl;
34     }
35     return 0;
36  } 
时间: 2024-08-24 08:22:22

Uva 514-铁轨 Rails的相关文章

UVa 514 Rails(经典栈)

 Rails  There is a famous railway station in PopPush City. Country there is incredibly hilly. The station was built in last century. Unfortunately, funds were extremely limited that time. It was possible to establish only a surface track. Moreover, i

[2016-02-03][UVA][514][Rails]

时间:2016-02-03 22:24:52 星期三 题目编号:UVA 514 题目大意:给定若干的火车(编号1-n),按1-n的顺序进入车站, 给出火车出站的顺序,问是否有可能存在 分析:    FIFO,用栈模拟一遍即可, 方法:    根据输入的顺序,从1-n开始,当前操作的为i 如果i是当前对应的编号,那么直接跳过(进入B) 如果不是,根据当前需求的编号,小于i,就从栈顶弹出一个元素, 看这个元素是否是需求的,是则继续.否则NO 1 2 3 4 5 6 7 8 9 10 11 12 13

UVa 514 - Rails

https://uva.onlinejudge.org/external/5/514.pdf 514 Rails There is a famous railway station in PopPush City. Country there is incredibly hilly. The station was built in last century. Unfortunately, funds were extremely limited that time. It was possib

Rails,uva 514

题目:铁轨 题目链接:UVa514链接 题目描述: 某城市有一个火车站,有n节车厢从A方向驶入车站,按进站的顺序编号为1-n.你的任务是判断是否能让它们按照某种特定的顺序进入B方向的铁轨并驶入车站.例如,出栈顺序(5 4 1 2 3)是不可能的,但是(5 4 3 2 1)是可能的. 题目分析: 为了重组车厢,借助中转站,对于每个车厢,一旦从A移入C就不能回到A了,一旦从C移入B,就不能回到C了,意思就是A->C和C->B.而且在中转站C中,车厢符合后进先出的原则.故这里可以看做为一个栈. 题目

UVa 514 Rails(模拟栈)

题意  n辆火车按顺序依次进站  判断给定的出战顺序是否可能 用数组模拟模拟栈代表车站  车依次进站  每当栈顶火车序号与当前要出站的b[cur] 相等时 就让栈顶元素出栈  即top-- #include<cstdio> #include<cstring> using namespace std; const int N = 2000; int b[N], c[N]; int main() { int l, cur, top; while(scanf("%d"

例题6-2(Rails, UVa 514)

题目链接 给定入栈顺序,问能否以给出的顺序出栈. 众所周知,栈的特点是先入后出. 此特点在该题中体现为对于当前需要出栈的元素(要想先出),必须位于栈顶或者还未入栈(必须后入). 用数组target来存储出栈序列,target[B_now] 表示当前需要驶入B的车厢(即当前需要出栈的元素),A_first表示当前A中第一个车厢(即下一个入栈元素) 1 #include <iostream> 2 #include <stack> 3 using namespace std; 4 5 c

UVA - 514 Rails 经典栈使用

题目大意:有一列n节车厢的火车要入栈,车厢从1到n,只能从小到大入栈. 现在给出一个出栈顺序,问能否实现 解题思路:如果栈顶元素大于要出栈的数,肯定就不能实现了. 如果栈顶元素小于要出栈的数,就继续入栈 如果栈定元素等于要出栈的数,就出栈 #include<cstdio> #include<algorithm> #include<stack> using namespace std; #define maxn 1010 int num[maxn], n; void so

UVa 514 (stack的使用) Rails

练习一下stack的使用,还有要注意一下输入的格式,看了好长时间没懂. 1 //#define LOCAL 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 #include <stack> 6 using namespace std; 7 8 const int maxn = 1000 + 10; 9 int n, target[maxn]; 10 11 int main(vo

UVa 514 Rails(栈的应用)

题目链接: https://cn.vjudge.net/problem/UVA-514 1 /* 2 问题 3 输入猜测出栈顺序,如果可能输出Yes,否则输出No 4 5 解题思路 6 貌似没有直接可以判定的方法,紫书上给出的方法是在进行一个入栈出栈操作,看是否能够构成原始的入栈序列. 7 */ 8 #include<cstdio> 9 #include<stack> 10 11 using namespace std; 12 int ok(int a[],int n); 13 i

铁轨(UVa 514)

利用栈实现 C++11 代码如下: 1 #include<iostream> 2 #include<stack> 3 using namespace std; 4 #define maxn 1001 5 int n, num[maxn]; 6 7 int main() { 8 while ((cin >> n)&&n!=0) { 9 while (n) { 10 for (int i = 1; i <= n; i++) { 11 cin >&