Official

C - Exoswap Editorial by gazelle


\(P_i = 1\) なる \(i\) について、真っ先に、

  • \(P_{i - 1} \)\(P_i\) を入れ替える

  • \(P_{i - 2} \)\(P_{i - 1}\) を入れ替える

    \(\vdots\)

  • \(P_{1} \)\(P_{2}\) を入れ替える

という操作をしてしまって問題ありません。まず、この操作がこの順番で行われなければ、最終的に \(P_1 = 1\) とすることができません。また、入れ替える数に交わりのない操作は、行う順番を入れ替えても結果は変わらないことを考えると、操作を全て最初に行ってしまっても問題ないことが示せます。

この操作を行ったあと、 \(P_1, P_2, \ldots P_{i - 1}\) の値はその時点で確定します。よってこの中に \(P_j \neq j\) なる \(j\) があれば、答えは -1 です。そうでなければ、\(P_i\) 以降の部分について同様の議論を適用していけばよいです。

適切に実装することで、\(O(N)\) で問題を解くことができます。

posted:
last update: