切換
舊版
前往
大廳
主題

ZeroJudge - c182: F.燈泡 解題心得

Not In My Back Yard | 2018-09-23 20:48:15 | 巴幣 0 | 人氣 156

題目連結:


題目大意:
給定一正整數N(1 ≦ N ≦ 3 * 10 ^ 5),代表接下來有N個數字。

接著的每個數字i(編號從1開始,由左至右),代表第i個燈泡的狀態。「1」表示燈泡是亮的,「0」則是暗的。

而每喊一個數字K,所有編號是K的倍數之燈泡將會改變狀態(亮變暗、暗變亮)。

求把所有燈泡都變暗,最少需要喊幾個數字?


解題思維:
仔細觀察數列,當我們隨機喊一個數字K,會改變的只有 ≧ K的數字(更精確地說,K的倍數),而K的左方完全不會變動。因此如果K的左方如果有燈泡還是亮的,那就有極高的機會會被再次改變狀態,等同於白費功夫。

所以,我們可以推論,從最左邊的燈泡往右開始找起。如果遇到亮的燈泡,就喊此燈泡編號(也就更改了此編號的倍數之所有燈泡)。如此,便可以確保每個燈泡都會變暗,且所需喊的數字是所有方法當中最少的。

然後看中途喊了幾個數字,即是答案。



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

創作回應

更多創作