人工知能と競プロやってくブログ

深層学習・機械学習・AI・atcoder・競技プログラミングについて調べてやってみたことをまとめるブログです

AtCoder Beginner Contest 072 [ D - Derangement ] をPythonで解く(400点🟫茶diff)

AtCoder ProblemsにRecommendationって機能あって、ユーザことにオススメの難易度の問題を勧めてくれるんですよね(Atcoder Problems -> User -> Recommendation)。
🟫茶diffやるべきだろうなと思ってたら、見事に茶の問題ばかり勧められるので、素直にやってきます。

atcoder.jp

解法

  • 数列pを頭から見ていって、Pi == i となってる場所にフラグを立てる
  • フラグを頭から見ていって立ってる場所を隣とスワップ。基本はiを見てi + 1とスワップ。最終ループはiとi+1両方見る
  • 全部スワップしたかのフラグチェックを二分探索で。TLE対策

書いたPythonコード

参考

公式解説

https://img.atcoder.jp/arc082/editorial.pdf