競技プログラミング用 知識集積所
ABC444D - Many Repunit Sum
最終更新:
sport_programming
-
view
問題
必要知識
B以下レベルの内容は省略
考え方
- 百の位に該当する要素に1を足す
- 十の位に該当する要素に1を足す
- 一の位に該当する要素に1を足す
- もし10以上の値が入っているところがあれば、繰り上がり処理を行う
とやればよい。
しかし、これをそのままやると、足すレピュニットの桁数が多いと計算量が増えてTLE。
そこで高速化の工夫をする。
足すのがレピュニットであるということは、vectorのある範囲全てに1を足すということである。
つまり、まずはそのvectorの階差数列※を作っておき、全入力分処理した後で累積和で本来の値を復元すればよい。
これであとはvectorの長さに気を付けながら繰り上がり処理をするだけとなる。
そこで高速化の工夫をする。
足すのがレピュニットであるということは、vectorのある範囲全てに1を足すということである。
つまり、まずはそのvectorの階差数列※を作っておき、全入力分処理した後で累積和で本来の値を復元すればよい。
これであとはvectorの長さに気を付けながら繰り上がり処理をするだけとなる。