(考试大整理~)Xxy 的车厢调度x
Posted 云深不知处
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(考试大整理~)Xxy 的车厢调度x相关的知识,希望对你有一定的参考价值。
这一题我以前研究过哈哈哈~
(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
5 4 3 2 1
YES
Hint
对于 50%的数据,1<=N<=20。
对于 100%的数据,1<=N<=1000。
解题思路:
因为车厢调度题目的意思是能不能按输入的顺序输出,
所以应该先看输入的第一个数,样例的第一个为5
所以进5辆车,此时车已经全部进完,所以接下来5号出站后,只有可能5号下面的出站,如果可以,出站,不可以的话,则输出“NO”;
#include<cstdio> #include<iostream> using namespace std; int a[1010],b[1010]; int main() { freopen("train.in","r",stdin); freopen("train.out","w",stdout); int n; scanf("%d",&n); for(int i=1;i<=n;++i)//进站顺序 { scanf("%d",&a[i]); } int top=0; for(int i=1,cur=1;i<=n;++i) { while(b[top]<a[i])//cur为出站的车厢 { b[++top]=cur++; } if(b[top]==a[i]) { top--; } else { printf("NO"); return 0; } } printf("YES"); fclose(stdin); fclose(stdout); return 0; }
以上是关于(考试大整理~)Xxy 的车厢调度x的主要内容,如果未能解决你的问题,请参考以下文章