(考试大整理~)Xxy 的车厢调度
這一題我以前研究過哈哈哈~
(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
5
5 4 3 2 1
train.out
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; }?
轉載于:https://www.cnblogs.com/zxqxwnngztxx/p/6679727.html
總結
以上是生活随笔為你收集整理的(考试大整理~)Xxy 的车厢调度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SDCC 2016数据库架构技术峰会(深
- 下一篇: interface 相关知识