h3mky0's blog

主に競プロについて書きます

Codeforces Round #456 (Div. 2) D. Fishes

問題リンク
codeforces.com
問題概要
n*mのグリッドが与えられる. ここにk匹の魚を配置する(各グリッドに高々1匹). このときグリッド上で等確率でr*rの正方形を指定したとき, 魚の個数の期待値を最大化したい. この値を求める.

制約
 1 \leq n, m \leq 10^5
 1 \leq r \leq min(n, m)
 1 \leq k \leq min(n×m, 10^5))

解法
任意の魚について, 現れる回数の総和を最大化したいので, r*rのグリッドの重複が大きい順にk個取る問題と言い換えることができる.
重複数は場合分けをすることでO(1)で求められるので, 始点を(n/2, m/2)としてPriority_queueを使って大きい順に取っていけばよい.

提出コード
Submission #100117320 - Codeforces