前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Xxy 的车厢调度

Xxy 的车厢调度

作者头像
attack
发布2018-04-12 16:09:19
7190
发布2018-04-12 16:09:19
举报

有 一 个 火 车 站 , 铁 路 如 图 所 示 ,每辆火车从 A 驶入,

再从 B 方向驶出,同时它的车厢可以重新组合。假设

从 A 方向驶来的火车有 n 节(n<=1000) ,分别按照顺

序编号为 1,2,3,…,n。假定在进入车站前,每节

车厢之间都不是连着的,并且它们可以自行移动到 B

处的铁轨上。 另外假定车站 C 可以停放任意多节车厢。

但是一旦进入车站 C,它就不能再回到 A 方向的铁轨

上了,并且一旦当它进入 B 方向的铁轨,它就不能再

回到车站 C。

负责车厢调度的 xxy 需要知道能否使它以

a1,a2,…,an 的顺序从 B 方向驶出,请来判断能否得到

指定的车厢顺序。

Input

输入文件的第一行为一个整数 n,其中 n<=1000,表示有 n 节车厢,第二行为 n 个数字,表

示指定的车厢顺序。

Output

如果可以得到指定的车厢顺序,则输出一个字符串”YES”,否则输出”NO”(注意要大写,不

包含引号) 。还有,xxy 说了 这题 AC 有糖吃。

Example

train.in train.out

5

5 4 3 2 1

YES

Hint

对于 50%的数据,1<=N<=20。

对于 100%的数据,1<=N<=1000。

思路:。

我们只需要判断:

1对于每一个进车站的车,如果他比已经进来的所有的车的编号都要大时,需要将比他所有小的车全部进入车站

2如果需要出去的车恰好是第一辆的车,那么让他出去

3如果需要出去的车的编号小于最大的编号,就输出NO

改了n次才AC的代码:

代码语言:javascript
复制
 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int a[10001];
 5 int stack[10001];
 6 int top=0;
 7 int cur=1;
 8 int main()
 9 {
10     //freopen("train.in","r",stdin);
11     //freopen("train.out","w",stdout);
12     int n;
13     int cur=1;
14     cin>>n;
15     for(int i=1;i<=n;i++)
16     cin>>a[i];
17     for(int i=1;i<=n;i++)
18     {
19         
20         while(cur<=a[i])
21         {
22             stack[++top]=cur++;
23             //cur++;
24         }
25         if(stack[top]==a[i])
26             --top;
27         else
28         {
29             cout<<"NO";
30             return 0;
31         }
32     }
33     printf("YES");
34     return 0;
35 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-04-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档