水銀メモ_________φ

外部記憶装置として再開

CodeForces #375_Div2 : C. Polycarp at the Radio

Problem - C - Codeforces

問題

大きさ  n の整数配列  a が与えられる。
 a_iの値を任意の値に変更することができる」 という条件下で、
1からm  ( m \leqq n) それぞれの値の出現数の最小値を最大化させたい。

最大化させた出現数の最小値 / この時の最小変更回数 / 変更後の配列 を求めよ。

解法

まず第一に配列の大きさ n 、最大化させたい値の範囲 mから 、
最大化させた出現数は  \lfloor\frac{n}{m}\rfloor に固定される。 ( M =  \lfloor\frac{n}{m}\rfloor とおく)

( m を超える値の数の総数) + (1からm の中で出現数がMを超えた差分) を使って
1m の内、出現数がMに達していないものを補填してあげれば良い。

1m の出現数を配列  c
( m を超える値の数の総数) を  f[m]、
(1からm の中で出現数がMを超えた差分) を  f[0]〜f[m-1] に入れ管理している。

計算量は O(n+m)

ソース

感想

やるだけの問題なのに落としたのが勿体なさすぎる・・