[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;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。