【題目描述】:
有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 次操作...