前往
大廳
主題

ZeroJudge - f928: 連環炸彈.................Boom! 解題心得

Not In My Back Yard | 2021-09-10 00:00:09 | 巴幣 0 | 人氣 280

題目連結:


題目大意:
輸入第一列給定一正整數 N(1 ≦ N ≦ 1000),代表有 N 個炸彈排成一列,編號為 0 ~ N - 1。接著第二列給定 N 個正整數(皆介於 1(韓)~ 10(含)之間),代表炸彈的種類。最後的第三列輸入給定一整數(介於 0 ~ N - 1 之間),代表最一開始引爆的炸彈之編號。

當炸彈種類為 1 時,代表該炸彈只會將自己炸掉,而不會波及其他炸彈;當種類為 2 時,該炸彈將會波及到左右(如果有的話)的炸彈;而對於種類值  K 大於 3 的炸彈(假設其編號為 X),代表它將會波及 X - 2K 、 X - K 、 X + K 、 X + 2K 這四個編號的炸彈(如果該位置編號存在的話)。

試問最後所有炸彈的狀態。如果有被引爆則輸出 0;反之,輸出該炸彈的種類之值。



範例輸入:
範例輸入 #1
5
1 1 1 1 1
2

範例輸入 #2
5
1 1 2 1 1
2

範例輸入 #3
13
1 1 1 1 1 1 3 1 1 1 1 1 1
6

範例輸入 #4
13
1 1 1 1 1 1 3 1 1 2 1 1 1
6


範例輸出:
範例輸出 #1
1 1 0 1 1

範例輸出 #2
1 0 0 0 1

範例輸出 #3
0 1 1 0 1 1 0 1 1 0 1 1 0

範例輸出 #4
0 1 1 0 1 1 0 1 0 0 0 1 0


解題思維:
我們將一開始引爆的炸彈之編號放入一佇列中,然後用一個布林陣列來表示每個編號炸彈是否有被引爆。接著我們重複直到佇列為空:判斷目前這顆炸彈的種類為何,根據題意延展到會被波及的炸彈之編號。如果編號超過範圍,又或是該編號的炸彈已經被引爆過了(根據前面定義的布林陣列)就忽略;反之將該編號加入佇列之中。

最後掃過一次所有炸彈的狀態,有被引爆過就輸出 0;反之輸出種類值即可。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

相關創作

更多創作