tk555 diary

プログラミング、もしくはそれ以外のこと書きます。

ABC072-D

問題

atcoder.jp

回答

atcoder.jp

 紙

f:id:tk55513:20190302012919j:plain

 

思考

  1. 前から一つずつ見て行ってi-1までは完全にスワップできているとする。p[i]==i+1ならans++,なおかつp[i+1]が存在してp[i+1]==i+2ならiとi+1をスワップするとしてi++
  2. テストケースが上手くいくから提出

合ってる確証が得られていないのが問題か。

しかしpdfも同じことやってるがpdf読んでも合っている印象は得られないから思考力がアレなんだろう。

 

他人の解法

上位7人(java)の解法見たけどなんかムズいことやってる。 

 

 

 

7人中2人がfor文の前のインデックス(index)でp[index]==index+1であるflagを持っていた...けどどうだろう、俺がそれやるとバグらせると思う。

 

7人中1人の解法はp[i+1]がi+2だろうがでなかろうがに関わらずp[i]==i+1ならp[i]とp[i+1]を交換(p[i]==i+1なのでこの交換をしてもp[i+1]==i+1(!=i+2))、i++することで簡単に書いてる。

慣れるとこっちのほうがいいか。