UOJ 152 盤子序列

2022-05-23 10:03:06 字數 1054 閱讀 4364

【題目描述】:

有n 個盤子。盤子被生產出來後,被按照某種順序摞在一起。初始盤堆中如果乙個盤子比所有它上面的盤子都大,那麼它是安全的,否則它是危險的。稱初始盤堆為a,另外有乙個開始為空的盤堆 b。為了掩蓋失誤,生產商會對盤子序列做一些「處理」,每次進行以下操作中的乙個:(1)將a 最上面的盤子放到 b 最上面;(2)將 b 最上面的盤子給你。在得到所有n個盤子之後,你需要判斷初始盤堆裡是否有危險的盤子。

【輸入描述】:

輸入包含多組資料(不超過 10 組)

每組資料的第一行為乙個整數 n

接下來n 個整數,第 i 個整數表示你收到的第 i 個盤子的大小

【輸出描述】:

對於每組資料,如果存在危險的盤子,輸出」j」,否則輸出」y」

【樣例輸入】:

32 1 3

33 1 2

【樣例輸出】:yj

【時間限制、資料範圍及描述】:

20%的資料保證 n<=8

80%的資料保證 n<=1,000

100%的資料保證 1<=n<=100,000,0《盤子大小<1,000,000,000 且互不相等

本題中的初始序列必須是遞降序列,那麼對於我得到的序列,只要維護乙個單調增棧,將自己的盤子不斷放入這個棧,然後將需要彈出的盤子放入初始盤堆中,如果放不了則存在危險的盤子,。

code:

#include#include#include#include#include#include#includeusing namespace std;

const int n=100005;

int n,a[n],q[n],q[n],length_q,length_q;

void init()

for(int i=1;i<=n;i++)

if(!q[length_q]||a[i]>q[length_q])

else

} while(length_q)

for(int i=1;i} puts("y");

}int main()

return 0;

}

UOJ 152 漢諾塔 題解

三根柱子,n nn 個盤子,編號 1 11 n nn,開始時盤子亂序套在一根柱子上。構造一種方案,用 106 10 6 106 以內步數使所有盤子以遞增序套在一根柱子上。n 1 04 n leq 10 4 n 10 4這個題的目的是要把盤子排序。1 04 10 4 104 和 106 10 6 10...

UOJ 152 漢諾塔 分治

題目鏈結 題意 有三根編號為 1,2,3 的柱子,然後第一根柱子上有編號為 1 sim n n leq 10000 的盤子,從上到下第 i 個盤子的編號是 a i 其他兩根柱子是空的。你可以進行一種操作x y,表示將第 x 根柱子最上面的盤子放到第 y 根柱子的最上面去。輸出不超過 10 6 次操作...