#AGC028B. [AGC028B] Removing Blocks
[AGC028B] Removing Blocks
题目描述
個のブロックが一列に並んでおり、左から右へ順に から の番号がついています。 それぞれのブロックには重さが定まっており、ブロック の重さは です。 すぬけ君は、これらのブロックに対して次の操作を 回行います。
- まだ取り除かれていないブロックを つ選んで取り除く。 この操作のコストは、取り除くブロックと連結なブロック(取り除くブロック自身も含む)の重さの総和となる。 つのブロック , ( ) が連結であるとは、すべての ( ) について、ブロック が取り除かれていないことを意味する。
ブロックを取り除く順番はちょうど 通りあります。 通りのすべての順番について 回の操作のコストの合計を求め、その総和を求めてください。 ただし、答えは非常に大きくなることがあるので、 で割った余りを求めてください。
输入格式
入力は以下の形式で標準入力から与えられる。
输出格式
通りのすべての順番について 回の操作のコストの合計を求め、その総和を で割った余りを出力せよ。
题目大意
有 块砖块排列成一行,从左到右编号为 到 。每一个砖块都有一个重量,砖块 的重量为 。 Snuke 会对这些 个砖块执行如下操作:
- 选择一个还没有被移除的砖块,然后移除它。这个操作的代价是与被移除的砖块相邻的砖块(包括它自己)的重量之和。我们定义两块砖 和 是相邻的,当且仅当对于所有 ,砖块 仍然没有被移除。
有 种移除砖块的可能顺序。你需要对于所有可能的顺序计算出移除完所有 块砖块的代价,并计算这些代价的和。由于答案可能非常大,答案需要对 取模。
2
1 2
9
4
1 1 1 1
212
10
1 2 4 8 16 32 64 128 256 512
880971923
提示
制約
- 入力はすべて整数である。
Sample Explanation 1
ブロック , の順で取り除く場合を考えます。 まず、最初の操作では、ブロック と が連結なので、操作のコストは です。 次の操作では、ブロック しか残っていないので、操作のコストは です。 よって、この順で取り除く場合のコストの合計は です。 ブロック , の順で取り除く場合を考えます。 まず、最初の操作では、ブロック と が連結なので、操作のコストは です。 次の操作では、ブロック しか残っていないので、操作のコストは です。 よって、この順で取り除く場合のコストの合計は です。 上記より、答えは となります。