AtCoder Regular Contest 136 B問題 Triple Shift
問題
提出解答
問題の概要
長さ の列 が与えられる. に対して次の操作を 回以上行い, と一致させられるか?
- 以上 以下の整数を つ選ぶ. をそれぞれ に置き換える.
制約
解法1 (必要十分条件)
まず, において出現回数が異なる整数が異なる場合は明らかに不可能である. 以降では は (条件に沿うとは限らない) 並び替えで一致するとする.
このとき, が に一致させることができることと, 適当な 偶置換 が存在して, となることである.
これを証明する. このとき, が を生成することを証明すれば良い.
において, であるとする. このとき, 適当な たちをかけ続けることにより, とすることができる. これを に注目することにより, ならば, にすることができる. 残りは についてだが, 要素の置換において偶置換は恒等置換しかない. そして, 偶置換同士の積も偶置換であることから, である.
よって, で となるものが存在する. このとき, なので,
であり, は で生成されることがわかった.
解法2 (判定)
解法1に引き続き, は (条件に沿うとは限らない) 並び替えで一致するとする. その並び替えを とする.
- に出てくる要素が互いに異なるとき, この は 唯一 である. 従って, が偶置換ならば肯定的で, 奇置換ならば否定的である.
- に出てくる要素において重複が存在するとき, が偶置換であるとき, そのまま肯定的である. が奇置換のとき, 仮定から, で となるものが存在する. よって, とすると, であり, である.
この判定法から, 以下のことを判定すれば良い.
- ある置換 が存在して, となるか?
- に重複があるか?
- に重複がないとき, 上の は偶置換か?
最後の偶置換かどうかについては転倒数の偶奇を見れば良い. この転倒数を求めるパートがボトルネックになり, 計算量 で求めることができる.