UVA 514 - Rails ( 铁轨)
from my CSDN: https://blog.csdn.net/su_cicada/article/details/86939523
例题6-2 铁轨(Rails, ACM/ICPC CERC 1997, UVa 514)
某城市有一个火车站,铁轨铺设如图6-1所示。 有n节车厢从A方向驶入车站,按进站顺
序编号为1~n。 你的任务是判断是否能让它们按照某种特定的顺序进入B方向的铁轨并驶出
车站。 例如,出栈顺序(5 4 1 2 3)是不可能的,但(5 4 3 2 1)是可能的。
为了重组车厢,你可以借助中转站C。 这是一个可以停放任意多节车厢的车站,但由于
末端封顶,驶入C的车厢必须按照相反的顺序驶出C。 对于每个车厢,一旦从A移入C,就不
能再回到A了;一旦从C移入B,就不能回到C了。 换句话说,在任意时刻,只有两种选择:
A→C和C→B。
Sample Input
5
1 2 3 4 5
5 4 1 2 3
0
6
6 5 4 3 2 1
0
0
Sample Output
Yes
No
Yes
和书上的思路一样
车进入是先从1到n
我们每进入一辆,就判断一下是不是要出去的那一辆, 如果是,这辆车就走了,然后判断一下下一辆
如果不是就进入中转轨道中等的
#include<iostream>
#include<stack>
using namespace std;
// [注意] 最后一组输出之后要有一个空行
int fun(int N){
stack<int> wait; // 等待通过的火车
stack<int> temp; // 中转轨道
for(int i=N;i>=1;i--){
wait.push(i);
}
int train;
int no = 0; // 不能吗
for(int i=1;i<=N;i++){
cin>>train;
if(train == 0)
return 0; // 该退出了
if(no == 1)
continue;
// cout<<train<<" ??????????????"<<endl;
// cout<<"wait: "; show(wait);cout<<"temp: "; show(temp);cout<<"---------------"<<endl;
while(temp.empty() || temp.top() != train){
if(wait.empty()){
no = 1; // wait空了,中转的第一个却不能走,所以不行
break;
}
int out = wait.top(); // 车厢出等待区
wait.pop();
temp.push(out); // 车厢 进入中转区
}
if(temp.top() == train)
temp.pop(); // 中转的车走了
}
if(temp.empty() && wait.empty()){
cout<<"Yes"<<endl;
}else{
cout<<"No"<<endl;
}
return 1;
}
int main()
{
int N;
int index = 0;
while(cin>>N && N != 0){
// if(index != 0)
index = 1;
while(fun(N)!=0);
cout<<endl;
}
return 0;
}
// AC at 2019/2/8 13:41
// spend about 1 hours
已经过了5天了有什么感想我也想不起来了,见鬼
UVA 514 - Rails ( 铁轨)的更多相关文章
- UVa 514 Rails(经典栈)
Rails There is a famous railway station in PopPush City. Country there is incredibly hilly. The st ...
- Uva - 514 - Rails
C是一个栈,每次先检查A的第一个元素是否满足,如果满足,直接进入B:再检查C中栈顶元素是否满足,如果满足,出栈进入B:前两步都不满足将A放入C栈中.循环到B满或者A,C中都不满足条件并且A空,第一种情 ...
- UVa 514 Rails(栈的应用)
题目链接: https://cn.vjudge.net/problem/UVA-514 /* 问题 输入猜测出栈顺序,如果可能输出Yes,否则输出No 解题思路 貌似没有直接可以判定的方法,紫书上给出 ...
- UVA ~ 514 ~ Rails (栈)
参考:https://blog.csdn.net/ZscDst/article/details/80266639 #include <iostream> #include <cstd ...
- UVA - 514 Rails(栈模拟)
题目: 给出一个序列,问将1,2,3,4……按从小到大的顺序入栈,能否得到给出的序列. 思路: 用stack模拟就可以了. 当前的cnt如果小于a[i],就将cnt入栈,否则就判断栈顶是不是和a[i] ...
- 铁轨(rails, ACM/ICPC CERC 1997,Uva 514)
铁轨(rails, ACM/ICPC CERC 1997,Uva 514) 题目描述 某城市有一个火车站,铁轨铺设如图所示.有n节车厢从A方向驶入车站,按进站顺序编号为1~n.你的任务是让它们按照某种 ...
- Rails,uva 514
题目:铁轨 题目链接:UVa514链接 题目描述: 某城市有一个火车站,有n节车厢从A方向驶入车站,按进站的顺序编号为1-n.你的任务是判断是否能让它们按照某种特定的顺序进入B方向的铁轨并驶入车站.例 ...
- UVa 514 (stack的使用) Rails
练习一下stack的使用,还有要注意一下输入的格式,看了好长时间没懂. //#define LOCAL #include <iostream> #include <cstdio> ...
- 6-2 铁轨 uva 514
较为简单的stack题目 但是还是犯了一些错误: 1. 要想清空栈,直接重新定义较为方便! 2.在if(s.top()==x)时 加上 !s.empty() 否则程序会崩溃 3. 必须要加上i- ...
随机推荐
- hbase shell基础和常用命令详解
HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服 ...
- 转贴:如何学好C++语言.docx
不知道哪里转的.呵呵 抱歉 C++是最难的语言.这个世界上最难的编程语言可能非C++莫属了.你千万不要以为几天就可以学好C++,C++的学习曲线是相当BT的,你可以看看这篇文章.C++是一门很自由的语 ...
- HTTP协议图--HTTP 协议报文结构
1.HTTP 报文 用于 HTTP 协议交互的信息被称为 HTTP 报文.请求端(客户端)的 HTTP 报文叫做请求报文:响应端(服务器端)的叫做响应报文.HTTP 报文本身是由多行(用 CR[car ...
- js判断鼠标滚轴方向(向上或向下)
var num=1; $(document).on("mousewheel DOMMouseScroll", function (e) { var delta = (e.origi ...
- JavaScript获取距离某天前或后的日期
/** * param Date Object:Mon May 11 13:53:08 UTC+0800 2015 * n 自param 起向后多少天 * return Date Object:M ...
- 2016424王启元 Exp6信息搜集与漏洞扫描
一.原理与实践说明 1.实践内容 本实践的目标是掌握信息搜集的最基础技能.具体有: 1.各种搜索技巧的应用 2.DNS IP注册信息的查询 3.基本的扫描技术:主机发现.端口扫描.OS及服务版本探测. ...
- Java50道经典习题-程序23 求岁数
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁.问第4个人岁数,他说比第3个人大2岁.问第三个人,又说比第2人大两岁.问第2个人,说比第1个人大两岁.最后问第一个人,他说是10岁.请问 ...
- 2019.3.5 控制台输出log4j得有些报错信息
报错内容如下 log4j:WARN No appenders could be found for logger (org.springframework.test.context.junit4.Sp ...
- linq中当生成asp.net实体模式时
linq中当生成asp.net实体模式时 注意: 选中 工具->库程序包管理器->管理解决方案的nuget程序包 选中下面的进行下载.
- LayIM.AspNetCore Middleware 开发日记(七)Asp.Net.Core.SignalR闪亮登场
前言 前几篇介绍了整个中间件的构成,路由,基本配置等等.基本上没有涉及到通讯部分.不过已经实现了融云的通讯功能,由于是第三方的就不在单独去写.正好.NET Core SignalR已经出来好久了, ...