UVA - 514 Rails
来源:互联网 发布:ios 数据共享 编辑:程序博客网 时间:2024/06/05 06:04
#include <iostream>#include <cstdio>#include <stack>#include <cstring>using namespace std;const int maxn = 1000 + 5;int train[maxn]; //B站的火车要求序列stack<int> station; //模拟火车进站 后进先出int n;int main(){ while(~scanf("%d", & n) && n) //输入火车长度 并且 长度为0结束程序 { while(1) { memset(train, 0, sizeof(train)); scanf("%d", & train[1]); if(!train[1]) break; //判第一个元素是否是0 如果是0 就重新输入n for(int i = 2; i <= n; i ++) scanf("%d", & train[i]); //继续输入 while(!station.empty()) station.pop(); //一定要清空栈(因为有可能因为上次循环而有数已经存入) int a = 1; //A站火车是按1,2,....n的序列 int b = 1; //B站火车的下标 while(a <= n) { station.push(a); //将a投入栈 while(!station.empty() && station.top() == train[b]) //判断栈顶元素是否可以出栈(循环) { station.pop(); //出栈 b ++; //继续判断下一个train[] } a ++; } if(station.empty()) //如果栈为空 则满足题意 printf("Yes\n"); else printf("No\n"); } printf("\n"); //格式 } return 0;}
题意:
A站的火车是按1,2,3…n的序列驶入station。再从station驶入B站。问是否可以按B站显示的火车序列驶入。
题解:
这道题的题意我真的是看很久。有的翻译上写着火车可以自由移动,什么鬼,自由移动不就什么序列都可以了么?后来经过几番询问,差不多可以这样理解:只能按1,2,3,…n的顺序驶入station,每个车厢驶入station后,有两种选择,一种是停留在station,另一种选择是驶出sation。按照这个规则,判断是否能产生B站那样的序列。例如: 1 3 2 5 4 ——1入 直接出。2入 停留。3入 直接出。2 出。4入 停留。5入 直接出。4出。这样就能产生 1 3 2 5 4这个序列。此题就是借助栈,也是一道经典的栈问题。
0 0
- Uva 514 Rails
- UVa 514 - Rails
- UVA 514 - Rails
- Uva Oj 514 - Rails
- uva 514 Rails
- UVA 514 Rails
- UVA 514 Rails
- Uva 514 Rails
- UVA 514 - Rails(模拟)
- UVA - 514 Rails
- UVa 514 Rails
- uva 514 - Rails(栈)
- UVa 514 Rails(栈)
- UVA 514 Rails
- UVa 514 - Rails
- UVA - 514 Rails
- UVa 514 - Rails
- Uva 514 Rails
- 欢迎使用CSDN-markdown编辑器
- IOS-tableview编辑
- 输入框的常用代理方法
- DOM(二)-03-DOM(示例-展开闭合列表)
- PostgreSQL物理备份与恢复
- UVA - 514 Rails
- linux 常用命令
- 如何编写linux守护进程?
- CreateEvent/SetEvent/ResetEvent和WaitForSingleObject
- 数据结构与算法分析——栈
- iOS 给collectionView增加Header
- Puppet3在CentOS6.5集群下的安装
- 利用GDB进行多线程调试
- OutMan——Foundation框架中的常用结构体、NSNumber类和NSValue类