西瓜の備忘録

競プロとかで気づいたこととか考察を書き留めるためのブログ

ABC072

A問題

最初max(A-B,0)をmin(A-B,0)と書いて1WA

ソースコードは省略

B問題

文字列の偶数文字目(1-indexed)を抜き取って出力

C問題

概要:長さNの整数列に±1(or0)したとき同じ数にできる数の個数の最大値を求めよ

制約が0≦Ai<10^5と小さいので素直に10^5の大きさのカウント用配列を作ってcnt[i-1]+cnt[i]+cnt[i+1]の最大値を求めれば良い(i = 0のときに注意)

 D問題

概要:長さNの整数列を隣合う2数を交換する操作をしてAi≠i(1≦i≦N)を満たす数列にするとき最小の交換回数を求めよ

bool型配列を用意し、Ai=iとなる場所をtrueにする

あとはtrueが連続するところを優先してfalseに変えていく

(例えば4,2,3,1という数列の場合4,2を入れ替えるより2,3を入れ替えたほうが交換回数が少なくできる)