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可以停...