UVA514:Rails(铁轨)

来源:互联网 发布:windows无法加载怎么办 编辑:程序博客网 时间:2024/03/29 14:56

作者:xq的acm之路

题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=455

题目大意:某城市有一个火车站,有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中,车厢符合后进先出的原则。所以这里可以看做为一个栈。

书上例题,不多说了,,,

代码如下:

#include <iostream>#include <stack>using namespace std;int a[10050];int main(){    int n;    while(cin>>n&&n)    {        stack<int>s;        int ok,zuo,you;        while(1)        {           cin>>a[1];           if(a[1]==0)               break;           for(int i=2;i<=n;i++)             cin>>a[i];           zuo=1,you=1,ok=1;           while(you<=n)           {               if(zuo==a[you])                  zuo++,you++;               else if(!s.empty()&&s.top()==a[you])                  you++,s.pop();               else if(zuo<=n)                  s.push(zuo++);               else                  {ok=0;break;}           }           if(ok==0) cout<<"No"<<endl;           else cout<<"Yes"<<endl;        }        cout<<endl;    }    return 0;}
0 0
原创粉丝点击