车厢调度
Posted HWIM
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了车厢调度相关的知识,希望对你有一定的参考价值。
车厢调度
(train.cpp/c/pas)
Description
有 一 个 火 车 站 , 铁 路 如 图 所 示 ,每辆火车从 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 YES
5 4 3 2 1
YES
Hint
对于 50%的数据,1<=N<=20。
对于 100%的数据,1<=N<=1000。
解题思路:
解题思路:
先记录下所有车的出站顺序;
模拟n辆车厢进站的情况;若进站车厢号比出站车号小,将此车厢进栈;
若是出站车厢号,则将此车厢不进栈,不出栈;
若以上都不符合,则证明不符合规则,输出no;
代码实现 :
1 #include<iostream> 2 using namespace std; 3 #include<cstdio> 4 int f[1010],head=0,z[1010]; 5 int main() 6 { 7 freopen("train.in","r",stdin); 8 freopen("train.out","w",stdout); 9 int n; 10 cin>>n; 11 for(int i=1;i<=n;++i) 12 scanf("%d",&f[i]); 13 for(int h=1,k=1;h<=n;++h) 14 { 15 while(k<=f[h]) //进栈 16 { 17 z[++head]=k;++k; 18 } 19 if(z[head]==f[h]) //出站 20 { 21 --head; 22 } 23 else 24 { 25 cout<<"NO"; 26 return 0; 27 } 28 } 29 cout<<"YES"; 30 fclose(stdin);fclose(stdout); 31 return 0; 32 }
以上是关于车厢调度的主要内容,如果未能解决你的问题,请参考以下文章