P1222 車廂排程

2021-10-03 23:00:39 字數 1465 閱讀 4578

p1222 車廂排程

描述有乙個火車站,鐵路如圖所示,每輛火車從a駛入,再從b方向駛出,同時它的車廂可以重新組合。假設從a方向駛來的火車有n節(n≤1000),分別按照順序編號為1,2,3,…,n。假定在進入車站前,每節車廂之間都不是連著的,並且它們可以自行移動到b處的鐵軌上。另外假定車站c可以停放任意多節車廂。但是一旦進入車站c,它就不能再回到a方向的鐵軌上了,並且一旦當它進入b方向的鐵軌,它就不能再回到車站c。

負責車廂排程的工作人員需要知道能否使它以a1,a2,…,an的順序從b方向駛出,請來判斷能否得到指定的車廂順序。

格式輸入格式

第一行為乙個整數n,其中n≤1000,表示有n節車廂,第二行為n個數字,表示指定的車廂順序。

輸出格式

如果可以得到指定的車廂順序,則輸出乙個字串」yes」,否則輸出」no」(注意要大寫,不包含引號)。

樣例輸入樣例

55 4 3 2 1

輸出樣例

yes限制

時間限制: 1000 ms

記憶體限制: 65536 kb

提示觀察發現,整個排程過程其實是在模擬入棧出棧的過程,而這個過程中,我們可以分成三種狀態:棧前、棧中、棧後。我們可以發現,當某個數字出棧了,說明比它小的數字要麼已經出棧了,要麼還在棧裡,不能是入棧前狀態,並且在棧中的順序是從大到小的(從棧頂往棧底看),比如出5,那麼1,2,3,4要麼已經在5之前出了,要麼還在棧中(假如1,3,4在棧中,從棧頂往棧底看依次為4,3,1),不能是入棧前的狀態。如果某個數字要出棧,那麼當前在棧中的數字都必須小於它,否則就與棧的性質矛盾,不合法,於是我們可以這樣解決:

從第乙個數字開始掃瞄,a[i]表示當前出棧的數字,如果有比a[i]大的數字還在棧中,那麼就產生矛盾,輸出「no」;否則,標記當前數字a[i]為棧後狀態,那麼[1, a[i]-1]這些數字如果還沒出棧,標記為棧中狀態。具體我們可以用0表示為確定狀態,1表示棧中狀態,2表示棧後狀態。

其實就是自己模擬一下入棧和出棧,一邊模擬一邊檢查

#include

#include

#include

#include

#include

#include

using

namespace std;

intmain()

stack<

int> st;

int flag =1;

int max =0;

for(

int i =

1; i <= n; i++

) max = num[i];}

else

max = num[i];}

else}}

}if(flag ==1)

else

return0;

}

1357 車廂排程 train

有乙個火車站,鐵路如圖所示,每輛火車從a駛入,再從b方向駛出,同時它的車廂可以重新組合。假設從a方向駛來的火車有n節 n 1000 分別按照順序編號為1,2,3,n。假定在進入車站前,每節車廂之間都不是連著的,並且它們可以自行移動到b處的鐵軌上。另外假定車站c可以停放任意多節車廂。但是一旦進入車站c...

1357 車廂排程 train

題目描述 有乙個火車站,鐵路如圖所示,每輛火車從a駛入,再從b方向駛出,同時它的車廂可以重新組合。假設從a方向駛來的火車有n節 n 1000 分別按照順序編號為1,2,3,n。假定在進入車站前,每節車廂之間都不是連著的,並且它們可以自行移動到b處的鐵軌上。另外假定車站c可以停放任意多節車廂。但是一旦...

ybt1357 車廂排程

時空限制 1000ms 64mb 有乙個火車站,鐵路如圖所示,每輛火車從a駛入,再從b方向駛出,同時它的車廂可以重新組合。假設從a方向駛來的火車有n節 n 1000 分別按照順序編號為1,2,3,n。假定在進入車站前,每節車廂之間都不是連著的,並且它們可以自行移動到b處的鐵軌上。另外假定車站c可以停...