AtCoder Beginner Contest 268 E問題 Chinese Restaurant (Three-Star Version)
問題
提出解答
問題の概要
円卓の周りを人 , 人 , , 人 がこの順に反時計回りに等間隔に座っている. 各人 の前には料理 がある.
次の操作を 回以上できる.
- 円卓を だけ反時計回りに回す. これによって, 人 の前にあった料理は人 に移動する.
操作後, 人 について, 不満度を以下を満たすような非負整数 の最小値と定義する.
- 人 または人 の前に料理 がある.
人の不満度の総和の最小値を求めよ.
喜ぶ人数の最大値を求めよ.
制約
- は の並び替え.
解法
で 回操作した場合における人 の不満度と定義する. このとき, 回操作すると一周するので, は 周期関数である.
次のような関数 を考える. を の逆並び替えとして, とする. すると, とすると, 次のように が変化する.
- が偶数のとき
- に対して,
- に対して,
- が奇数のとき
- に対して,
- に対して,
このとき, は2つの区間における に関する1次式で表されていることに着目する. つまり, は に関する1次式でもある. 従って, の2階差分をとると次のようになる.
- が偶数のとき
- のときの2階差分は
- のときの2階差分は
- のときの2階差分は
- 上記以外の における2階差分は
- が奇数のとき
- のときの2階差分は
- のときの2階差分は
- のときの2階差分は
- のときの2階差分は
- 上記以外の における2階差分は
※ が小さい場合, 上で述べた2階差分の情報がある に対して複数でてくる場合がある. このような場合はそれらに書いてある2階差分の総和をとる.
このとき, 実は である. そして, は連続する 個の整数以外では全て である. よって, は となる整数 を用いて となる.
各 の2階差分がゼロでは無い所が高々 点であるから, Imos法を利用することによって, を求めることができ, と の関係性を用いることにより, も求めることができる.
であるから, がゼロでない の最大値は である. よって, Imos 法による範囲も で済み, 計算量は 時間になる.