kaage精進録

雑な解説とかライブラリとかおきもちの垂れ流しです。

AGC046-C Shift

数え上げは言い換えの質

問題リンク

解法

0の前の1の数を並べて数列に変換する。

01100110\rightarrow[0,2,0,2,0] みたいな感じ

この数列と文字列は一対一対応をもち、この数列を A, もとの文字列の0の数を M とすると、操作は

0\leq i\lt j\leq M, A[j]\gt 0 なる i,j を選び、A[i] に 1 加え、A[j] から 1 減じる、と言い換えられる。

この操作からできる数列を数えればいいので、累積和と、もとの数列との差の絶対値の総和を持っておけばDPできて、O(N^4) になるが、間に合う。

感想

考察が終了してからDPに落とし込んだり、数列にして扱いやすくするのが苦手なので鍛えていきたい