AtCoder Beginner Contest 268 C問題 Chinese Restaurant
問題
提出解答
問題の概要
円卓の周りを人 , 人 , , 人 がこの順に反時計回りに等間隔に座っている. 各人 の前には料理 がある.
次の操作を 回以上できる.
- 円卓を だけ反時計回りに回す. これによって, 人 の前にあった料理は人 に移動する.
人 について, 料理 が人 のいずれの前にあれば喜ぶ.
喜ぶ人数の最大値を求めよ.
制約
- は の並び替え.
解法
回操作すると一周するので, 操作回数は 以上 未満としてよい.
人 の前に料理 がくるようにするための操作回数を とする. このとき, 人 が喜ぶための操作回数は の3個である. なお, の逆順列, つまり を満たすような順列とすると, である.
よって,各操作回数で何人が喜ぶかを記録しておくことにより, 各人につき3個の記録で済むので, 全体で 時間で計算できる.