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的时候没有直接结束输入..还是英文题读起来题意的理解有问题..

  • 相关阅读:
    webpack基础
    LeetCode232. 用栈实现队列做题笔记
    mysql 时间加减一个月
    leetcode 1381. 设计一个支持增量操作的栈 思路与算法
    LeetCode 141. 环形链表 做题笔记
    leetcode 707. 设计链表 做题笔记
    leetcode 876. 链表的中间结点 做题笔记
    leetcode 143. 重排链表 做题笔记
    leetcode 1365. 有多少小于当前数字的数字 做题笔记
    LeetCode1360. 日期之间隔几天 做题笔记
  • 原文地址:https://www.cnblogs.com/Qmelbourne/p/6024625.html
Copyright © 2011-2022 走看看