Codeforces Round #653 (Div. 3) - F. Cyclic Shifts Sorting

問題リンク

解説

まず与えられる操作は偶置換なので、もし値が全部異なるなら、ソート済みの数列と与えられる数列の置換の偶奇が違えばその時点で-1です。そうでなければ、適当に操作すれば答えが出ます。

以下同じ数字が存在するものとします

ここでいったん、全ての値が異なるように値を小さいほうから割り振りなおします。

で適当に操作してうまくいけば、それを出力です。

うまくいかないとき、同じ数字のやつの割り振った数字を入れ替えます。

この操作が必ず奇置換になる(帰納法で簡単に示せます)ので、置換の偶奇が入れ替わるため適当に操作すれば構築可能です。

提出コード

codeforces.com