以下の内容はhttps://emtubasa.hateblo.jp/entry/2018/12/18/000000より取得しました。


ABC072 D - Derangement

問題
提出コード

解法

p_i = iとなっている部分は、p_{i-1}もしくはp_{i+1}スワップをすることで、p_iは条件を満たすことができます。
このとき、実はスワップ先のp_{i-1}もしくはp_{i+1}も条件を必ず見たします。なぜなら、この数列は順列なので、p_i=iだった場合は、p_{i-1}もしくはp_{i+1}iとなり、中身の値がpの添え字と異なるからです。
このことを利用すると、前から順番に見ていき、p_i = iが存在した部分はp_{i+1}スワップする、という操作を繰り返すだけでよいことがわかります。
ただし、p_N = Nだった場合のみ注意が必要で、この場合はp_{N-1}スワップをすれば十分です(この操作により、前の方の最善手が変わることはありません)。




以上の内容はhttps://emtubasa.hateblo.jp/entry/2018/12/18/000000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14