《算法竞赛入门经典》6.1.2栈和队列-铁轨
2016-04-04 20:22
260 查看
某城市有一个火车站,铁轨铺设如下图所示。有n节车厢从A方向驶入车站,按进站顺序编号为1~n。你的任务是让它们按照某种特定的顺序进入B方向的铁轨并使出车站。为了重组车厢,你可以借助中转站C;这是一个可以停放任意多节车厢的车站,但由于末端封顶,驶入C的车厢必须按照相反的顺序驶出C。对于每个车厢,一旦从A进入C,就不能再回到A了;一旦从C进入B,就不能回到C了。换言之,在任意时刻,只有两种选择:A->C和C->B。
View Code
#include <cstdio> #include <stack> using namespace std; #define MAXN 1000 + 10 int n, target[MAXN]; int main(void) { while(scanf("%d", &n) == 1) { stack<int> s; int A = 1, B = 1; for(int i = 1; i <= n; i++) scanf("%d", &target[i]); int ok = 1; while(B <= n) { if(A == target[B]) { A++; B++; } //车厢按顺序进出中转站C,则跳出循环 else if(!s.empty() && s.top() == target[B]) { s.pop(); B++; }//若车厢按逆序进中转站C,则跳出循环 else if(A <= n) s.push(A++); //调整车厢为逆序出中转站C else { ok = 0; break; } //车厢既不是按顺序,也不是按逆序进出中转站C } printf("%s\n", ok ? "Yes" : "No"); } return 0; }
View Code
相关文章推荐
- 把GAE程序通过SSH部署到 VPS
- (转载)URL编码与解码
- 数据库系统概论学习02-基本概念
- uva 1103 Ancient Messages
- cocos2d: fullPathForFilename: No file found at resource/Player.png. Possible missing file.
- HDOJ 2099 整除的尾数
- 补间&属性动画
- 火星上有中国的地盘吗?
- 【追求进步】连续子数组的最大和
- 设计模式:中介者模式(Mediator)
- 设计模式:中介者模式(Mediator)
- 第四周自我总结
- LeetCode 225. Implement Stack using Queues
- hihoCoder 1014 Trie树 (Trie)
- freeswitch 高级主题之 jitter buffer
- 贪心算法总结
- 经验
- 第六周书面实践
- AntiModerate – 渐进式图片加载的 JavaScript 库
- Html点击按钮上下逐条滚动,外层div不遮挡内层div内容