4bitにっき

ぽよ

AtCoder Regular Contest 073 E - Ball Coloring

競プロ再開してみた(n回目)。

解法

(解説スライド通りなのだが、細かいところで詰まったので色々書いておく。)
赤と青、xとyは対称性があるのでいろいろ決めつけてよい。
解説スライド通り、青が全体最小も最大も取ってくれたら赤は自由にやれて、最大だけ赤に回ってくるなら赤と青の利害が一致しそうなので、以下のような場合分けを考える。
(1)全体最小も最大も全て青が取る
(2)全体最小はすべて赤、全体最大はすべて青が取る
(3)それ以外
(3)については、無駄があるので考えなくてよい。(最小を1つ以上取るなら全部背負えよ)
(2)は貪欲するだけで良さそう。

後は(1)について考える。
青が最悪スコアを常に叩き出すと決めつけて赤側の選び方だけ探索しても、最適解が一致するので問題ない。(多分実装が楽になる重要ポイント)
これは、赤が x_{i} y_{i}のうち小さい方だけ取る状態から、最小のネックになっているものについてもう片方と取り替える、ということを繰り返せば良い。

実装

一度バグってちゃんと考察しなおしたら実装が簡潔になって感動した。
詰まったらだいたい実装が頭悪いという思いが強まった。
http://arc073.contest.atcoder.jp/submissions/1302293