[Codeforces 1070F]Debate(貪心)
阿新 • • 發佈:2018-12-08
Address
洛谷 RemoteJudge
Codeforces 1070F
Meaning
- Alice 和 Bob 參加選舉
- 有 個投票人,第 個人有兩個屬性 和
- 對於第 個人, 是一個長度為 的 串
- 表示第 個人不支援 Alice 和 Bob
- 表示第 個人不支援 Alice 但支援 Bob
- 表示第 個人支援 Alice 但不支援 Bob
- 表示第 個人支援 Alice 和 Bob
- 第 個人的影響力為
- 現在要從中選出一些人,滿足下面 個條件
- (1)選出的人中,支援 Alice 的人數的 倍大於或等於選出的人數
- (2)選出的人中,支援 Bob 的人數的 倍大於或等於選出的人數
- 求選出的人的影響力之和的最大值
Solution
- 考慮把所有投票人按照 分開,顯然在最優方案中 的投票人必須被選出
- 然後重點對 、 、 進行分析
- 一個結論:在最優方案中,所有 的投票人全部被選出,或者所有 的投票人全部被選出
- 證明:如果有一種合法方案,有 個 的投票人沒被選出,有 個 的投票人沒被選出
- 那麼再選 個 的投票人和 個 的投票人則顯然還是合法
- 下面對 的投票人全部被選出的情況進行討論( 的投票人全部被選出的情況同理)
- 先把 的投票人按照 進行排序並求影響力的字首和
- 的投票人幹同樣的事情
- 下面設 為 的投票人個數
- 列舉 的投票人選出的個數
- 那麼如果 (支援 Alice 的人太少)或者 (支援 Bob 的人太少)則這個 不合法
- 否則之多可以選擇 個 的投票人
- 上式 內第一個引數為 的人數,第二個引數表示支援 Alice 1人數減去不支援 Alice 的人數(換句話說,表示最多還能有多少個人不支援 Alice ),第三個引數表示最多還能有多少個人不支援 Bob 。
- 顯然在 的人中選出一些以及在