2019年3月24日日曜日

AGC 032 A - Limited Insertion

AGC 032 A - Limited Insertion

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

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