UVA - 514 - Rails
[TOCM]
题意
题目的意思是将A方向开过来的火车(顺序编号不一定),借助C轨道,全部按照递增序列驶出B轨道, 设计程序判断是否可以实现。 注意的是,一列火车不能往回开,也就是只允许A->C,C->B。
♠题外话♠
说实话,不怕彰显我笨的潜质,总是感觉紫书上的代码不对劲啊,没有按照要求实现问题啊,有没有,逃了,小白吐槽。不过我就是抄,我也不信我眼瞎抄错了无数遍!题解思路
根据题目的描述,我们知道这个C轨道其实符合栈的定义,先进后出。 列车有两种选择,要么是正好轮到他这个编号出列,要么不轮到他,到C轨道待命,只要进了 C轨道,就是入栈了。
代码
#include <bits/stdc++.h> using namespace std; int main() { //freopen("t.txt", "w", stdout); int n; while (cin >> n && n) { int tar[2000] = { 0 }; int A = 1, B = 1; int temp; bool can = true; while (cin >> temp && temp) { tar[1] = temp; for (int i = 2; i <= n; i++) { cin >> tar[i]; } A = 1, B = 1; //if (!tar[1]) // break; stack<int> l; can = true; while (B <= n) { if (A == tar[B]) { A++; B++; } else if (!l.empty() && l.top() == tar[B]) { l.pop(); B++; } else if (A <= n) { l.push(A++); } else { can = false; break; } } if (can) cout << "Yes" << endl; else cout << "No" << endl; } cout << endl; } //system("PAUSE"); return 0; }
相关推荐
wl00 2020-10-28
EricNet 2020-07-05
EricNet 2020-05-27
何志文 2020-05-11
JOO 2020-04-26
happyfreeangel 2020-04-09
Poisedflw 2020-03-23
yangliuhbhd 2020-03-06
Ben的程序员生涯 2013-06-01
chenshuixian 2013-06-01
wes0 2014-05-31
mrice00 2019-12-20
EricNet 2019-12-11
89304896 2019-12-08
lihaoningxia 2013-07-09
userguanguan 2015-03-16