Xxy 的车厢调度
有 一 個 火 車 站 , 鐵 路 如 圖 所 示 ,每輛火車從 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的代碼:
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 }?
總結
 
                            
                        - 上一篇: sourcemap
- 下一篇: on duplicate mysql_m
