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,说是表达错误...心好累,求大神指教...

时间: 2024-10-24 20:12:31

Rails,uva 514的相关文章

例题6-2(Rails, UVa 514)

题目链接 给定入栈顺序,问能否以给出的顺序出栈. 众所周知,栈的特点是先入后出. 此特点在该题中体现为对于当前需要出栈的元素(要想先出),必须位于栈顶或者还未入栈(必须后入). 用数组target来存储出栈序列,target[B_now] 表示当前需要驶入B的车厢(即当前需要出栈的元素),A_first表示当前A中第一个车厢(即下一个入栈元素) 1 #include <iostream> 2 #include <stack> 3 using namespace std; 4 5 c

UVa 514 Rails(经典栈)

 Rails  There is a famous railway station in PopPush City. Country there is incredibly hilly. The station was built in last century. Unfortunately, funds were extremely limited that time. It was possible to establish only a surface track. Moreover, i

[2016-02-03][UVA][514][Rails]

时间:2016-02-03 22:24:52 星期三 题目编号:UVA 514 题目大意:给定若干的火车(编号1-n),按1-n的顺序进入车站, 给出火车出站的顺序,问是否有可能存在 分析:    FIFO,用栈模拟一遍即可, 方法:    根据输入的顺序,从1-n开始,当前操作的为i 如果i是当前对应的编号,那么直接跳过(进入B) 如果不是,根据当前需求的编号,小于i,就从栈顶弹出一个元素, 看这个元素是否是需求的,是则继续.否则NO 1 2 3 4 5 6 7 8 9 10 11 12 13

UVa 514 - Rails

https://uva.onlinejudge.org/external/5/514.pdf 514 Rails There is a famous railway station in PopPush City. Country there is incredibly hilly. The station was built in last century. Unfortunately, funds were extremely limited that time. It was possib

UVa 514 Rails(模拟栈)

题意  n辆火车按顺序依次进站  判断给定的出战顺序是否可能 用数组模拟模拟栈代表车站  车依次进站  每当栈顶火车序号与当前要出站的b[cur] 相等时 就让栈顶元素出栈  即top-- #include<cstdio> #include<cstring> using namespace std; const int N = 2000; int b[N], c[N]; int main() { int l, cur, top; while(scanf("%d"

UVA - 514 Rails 经典栈使用

题目大意:有一列n节车厢的火车要入栈,车厢从1到n,只能从小到大入栈. 现在给出一个出栈顺序,问能否实现 解题思路:如果栈顶元素大于要出栈的数,肯定就不能实现了. 如果栈顶元素小于要出栈的数,就继续入栈 如果栈定元素等于要出栈的数,就出栈 #include<cstdio> #include<algorithm> #include<stack> using namespace std; #define maxn 1010 int num[maxn], n; void so

UVa 514 (stack的使用) Rails

练习一下stack的使用,还有要注意一下输入的格式,看了好长时间没懂. 1 //#define LOCAL 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 #include <stack> 6 using namespace std; 7 8 const int maxn = 1000 + 10; 9 int n, target[maxn]; 10 11 int main(vo

UVa 514 Rails(栈的应用)

题目链接: https://cn.vjudge.net/problem/UVA-514 1 /* 2 问题 3 输入猜测出栈顺序,如果可能输出Yes,否则输出No 4 5 解题思路 6 貌似没有直接可以判定的方法,紫书上给出的方法是在进行一个入栈出栈操作,看是否能够构成原始的入栈序列. 7 */ 8 #include<cstdio> 9 #include<stack> 10 11 using namespace std; 12 int ok(int a[],int n); 13 i

UVa 514 数据结构栈

背景:1A 思路:栈模拟 我的代码: #include <set> #include <stack> #include <queue> #include <vector> #include <cstdio> #include <map> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm&g