AGC028 B - Removing Blocks
解法
サンプル2がすごい実験に使いやすいのでこれを利用していくことで解けました。
まず、は、番目が足される回数に最後に掛け合わせるだけでいいので、これ以降は無視をします。
ということで、番目の数字が何回足されるか、を調べます。
番目の数字が、回の試行において番目を取り除いたときに何回足されるか
とします。
はもちろんになります。
としてみます。
のとき、より先にが取り除かれてはいけません。
このようなパターンは、ちょうど半分存在するので、
になります。
のとき、を取り除く前に、とが先に取り除かれてしまってはいけないので、
1,2,3のブロックの順列を考えると、
123, 132, 213, 231, 312, 321 の6パターンのうち2パターンであったときのみを取り除いたときにの数が足されます。
これは全体でなので、
になります。
同様のことを考えると、
になります。
が2以降のときを考えていく必要があるのですが、より右側と左側はそれぞれ独立に考えてしまっても問題ありません。
なので、結局は、と似たようなことが起きていて、
という式が完成します。
あとはこの式の計算量を落とせば完成になります。
具体的には、の総和を愚直に求めた後は、が増えたときに先頭と末尾の2つの要素のみを入れ替えればいい(スライドしていくイメージです)ので、O(N)まで落とすことができます。
最後に、のについての総和と、の積をどんどん足していけば、答えが求まります。