AtCoder 🌈 AWC0022D Simultaneous Control of Light Bulb Panels
🔗 AWC0022D Simultaneous Control of Light Bulb Panels
Problem Statement
題目簡述
個燈泡排成一列,初始狀態為 ( 亮、 暗)。
每次操作可選一個位置 ,將連續 個燈泡 全部切換。
求最少幾次操作讓所有燈泡亮起,或判斷不可能。
Constraints
約束條件
思路:貪心 + 差分陣列
貪心策略
從左到右掃描,遇到暗的燈泡就立刻翻轉以 為起點的連續 個燈泡。這是唯一的選擇——因為 左邊的位置已經處理完畢,不會再有操作能覆蓋到 。若掃到某個暗燈泡時已經無法放下長度 的區間(),則無解。
用差分追蹤翻轉效果
貪心的瓶頸在於:每次翻轉影響 個位置,暴力修改是 。
但翻轉操作本質上就是對狀態做 XOR,可以用差分陣列維護區間操作:
- 維護一個累積翻轉狀態
s,在位置 時先s ^= diff[i]取得當前的翻轉奇偶性。 - 若
x ^ s == 1(該燈泡實際是暗的),執行翻轉:s ^= 1。操作區間為 ,因此在diff[i+K]打上標記,即再 XOR 一次。
也算是很經典的套路了。
複雜度分析
- 時間複雜度:
- 空間複雜度:
Code
1 | def solve(): |
本部落格所有文章除特別聲明外,均採用CC BY-NC-SA 4.0 授權協議。轉載請註明來源 十六個天亮!
評論
WalineGiscus







![Luogu 🟣 P4062 [Code+#1] Yazid 的新生舞会](https://i.pixiv.cat/img-master/img/2026/04/13/04/07/06/143491427_p2_master1200.jpg)

