題目連結:
題目大意:
輸入第一列給定一正整數 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;反之輸出種類值即可。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。