zoukankan      html  css  js  c++  java
  • 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&&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,说是表达错误...心好累,求大神指教...

    11.4修改:终于AC了,错误的原因是当n为0的时候没有直接结束输入..还是英文题读起来题意的理解有问题..

  • 相关阅读:
    screen:多重视窗管理程序
    tcpdump、nc网络工具使用
    Linux下查看系统版本号信息的方法
    python列表模拟堆栈和队列
    Linux Service and Security
    day2 列表
    Python常用方法
    Nginx1.6.0+MySQL5.6.19+PHP5.5.14(centos)
    LINUX Mysql5.6.19 安装
    python+django+pycharm 环境配置 (window7)
  • 原文地址:https://www.cnblogs.com/Qmelbourne/p/6024625.html
Copyright © 2011-2022 走看看