Codeforces 🟠 CF2178B. Impost or Sus
題目的難度顏色使用 Luogu 上的分級,由簡單到困難分別為 🔴🟠🟡🟢🔵🟣⚫。
🔗 CF2178B Impost or Sus
rating: 762
Problem Statement
題目簡述
給定一個僅由 s 和 u 組成的字串 ,定義 suspicious 字串需滿足:
- 字母
s至少出現兩次 - 對於每個
u,其左右最近的兩個s到它的距離相等
每次操作可將任意位置的字元變為 s,求最少操作次數使 成為 suspicious 字串。
Constraints
約束條件
思路:貪心分隔連續 u
等價條件推導
考慮 suspicious 字串中任意一個位於位置 的 u。設其左右最近的 s 距離皆為 ,則這兩個 s 必分別位於 與 。由此可推導出 suspicious 字串的充要條件:
- 首尾字元為
s - 不存在相鄰的
u
詳細推導
- 首尾必須是
s:若u位於端點,則有一側必定不存在s,無法滿足「兩側等距」。 - 每個
u的鄰居都必須是s:u兩側皆為s(如sus)→ 兩側最近s距離皆為 ,合法 ✓u一側為s、一側為u(如suus的左側u)→ 距離分別為 和 ,不等距 ✗u兩側皆為u(如suuus的中間u)→ 中間u本身可能等距,但該連續段的其他u必屬於上一情況,仍不合法 ✗
貪心策略
- 處理邊界:若首尾為
u,需將其改為s。 - 處理中間:對每段長度為 的連續
u,破壞其連續性需 次操作。
為何此策略最優?
將一段連續 個 u(形如 )的相鄰 u 兩兩配對:
每對中至少需將一個 u 改為 s,否則該對仍相鄰。故操作下界為 。
而將每對中的第二個 u 改為 s,便可恰好達到此下界。
複雜度分析
- 時間複雜度:。
- 空間複雜度:。
Code
1 | from itertools import groupby |
寫在最後
PROMPT
這裡什麼都沒有。
本部落格所有文章除特別聲明外,均採用CC BY-NC-SA 4.0 授權協議。轉載請註明來源 十六個天亮!
評論
WalineGiscus







