2019年3月24日日曜日

AGC 032 A - Limited Insertion

AGC 032 A - Limited Insertion

bi=bi+11b'_i = b_{i+1}-1として0-basedで考える。k{0,1,...,N1}k\in \{0, 1, ..., N-1\}が与えられたとせよ。bkb'_kより左にある数(b0,...,bk1b'_0, ..., b'_{k-1})がbkb'_k個より多く挿入されると、もうbkb'_kは挿入できない。また、bkb'_kより左にある数を少なくともbkb'_k個挿入ずみでないと、bkb'_kはまだ挿入できない。したがって、B={bibibi}B = \{b'_i | b'_iより左の数がちょうどb'_i個挿入ずみ\}から1つ選んで挿入する操作をNN回繰り返せればそれが答えになるし、できなければ不可能である。ここでもう少し考えると、常にBBの中でいちばん右にある数だけ調べれば良いことに気づく。というのも、bib'_iより右にある数が挿入ずみかどうかはbib'_iが挿入できるかどうかに影響しないからである。計算量はO(n2){\mathcal O}(n^2)

操作を逆順に見るとよりシンプルになるらしい。それは最初に検討するべきだった。