首页 > 代码库 > Rails,uva 514
Rails,uva 514
题目:铁轨
题目链接:UVa514链接
题目描述:
某城市有一个火车站,有n节车厢从A方向驶入车站,按进站的顺序编号为1-n.你的任务是判断是否能让它们按照某种特定的顺序进入B方向的铁轨并驶入车站。例如,出栈顺序(5 4 1 2 3)是不可能的,但是(5 4 3 2 1)是可能的。
题目分析:
为了重组车厢,借助中转站,对于每个车厢,一旦从A移入C就不能回到A了,一旦从C移入B,就不能回到C了,意思就是A->C和C->B。而且在中转站C中,车厢符合后进先出的原则。故这里可以看做为一个栈。
题目分析:感觉思想这个东西还是很重要呀,很多东西想不到呢
书中给的代码最核心的是用了a这个变量来记录已经进入栈中最大的数据。如果将要出栈的数据大于这个数据,那么使得a++,再继续循环。如果比这个数据小但是却和栈顶元素不相等则可以证明这个顺序不可能存在。
#include <iostream> #include <stack> const int MAXN=1000+10; int target[MAXN]; using namespace std; int main() { stack<int> s; int n,t; t=1; target[1]=1; while(cin>>n){ while(cin>>target[1]&&target[1]){ for(int i=2;i<=n;i++){ cin>>target[i]; } int a=0,b=1; int ok=1; stack<int> s; while(b<=n){ if(target[b] == a){a++;b++;} else if(!s.empty()&&s.top()==target[b]){s.pop();b++;} else if(a<=n){s.push(a++);} else {ok=0; break; } } if(ok==1)cout<<"Yes"<<endl; else cout<<"No"<<endl; } cout<<endl; } return 0; }
不知道为啥还是不能ac,说是表达错误...心好累,求大神指教...
Rails,uva 514
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。