1077: 铁轨
作者:互联网
题目描述
PopPush城市有一座著名的火车站。这个国家到处都是丘陵。而这个火车站是建于上一个世纪。不幸的是,那时的资金有限。所以只能建立起一条路面铁轨。而且,这导致这个火车站在同一个时刻只能一个轨道投入使用,因为它缺少空间,两列火车将无路可走。具体看下图。
当地的惯例是每一列火车从A方向驶向B方向时候,会用某种方式将车厢重组。假设火车将要到达A方向,拥有N个车厢(N<=1000),这些车厢按照递增顺序标记为1到N。负责重组车厢的领导,必须知道是否能重组车厢让它驶出B,而这个重组的序列就是a1\a2\a3…aN.请帮助他写一个程序来判断是否可能按照所要求的车厢顺序。你可以假设,单个的车厢可以从列车上分离出来,在他们进入站台之前。并且他们可以自由移动,直到它们上了B轨道。你也可以假设在任意时候站台可以放下无数的车厢。但是只要一个车厢进入站台,它就不能返回A轨道,同时如果它离开了站台驶向B轨道,它就不能返回站台。
输入
输入包含多组测试用例。
对于每组测试用例,第一行包含一个正整数n(1<=n<=1000)。
以下每一行包含n个数字,代表列车的驶出序列。
每组测试用例以一个单独的0结尾。
以一个单独的0作为结束输入。
输出
对于每一组测试样例的每一行,输出驶出顺序是否合法。
测试样例间以空行进行分隔。
样例输入
5 1 2 3 4 5 5 4 1 2 3 0 6 6 5 4 3 2 1 0 0
样例输出
Yes No Yes
【思路】数字1~N依次存放在栈中,在将1~N存放同时,将栈顶元素与已存入数组中的元素进行比较,若相同,则将栈顶元素出栈,扫描数组的指针X移向下一个位置,若不同,则将数字1~N依次入栈,当N入栈后整个循环结束,此时判断栈是否为空,若空,则有效,反之,无效.注意输入输出格式.
#include <iostream>
#include <stack>
using namespace std;
int main() {
int n, m;
while (cin>>n&&n) {
int num[n+1];
while(cin>>num[1]&&num[1]){//一个n可能有多组数据,0作为结束
stack<int> s;
int x=1;
for (int i=2;i<=n;i++)
cin>>num[i];
for (int i=1;i<=n;i++) {
s.push(i);
while (!s.empty()&&s.top()==num[x]) {
x++;
s.pop();
}
}
if (s.size()==0)cout<<"Yes\n";
else cout<<"No\n";
}
cout<<endl;
}
return 0;
}
The Ant 发布了44 篇原创文章 · 获赞 1 · 访问量 2275 私信 关注
标签:num,int,1077,样例,火车站,测试用例,铁轨,输入 来源: https://blog.csdn.net/Do_________/article/details/104069674