問題一覧 > 通常問題

No.503 配列コレクション

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 40
作問者 : Pulmn / テスター : conf
1 ProblemId : 1522 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2017-04-08 01:32:30

問題文

MAK君の趣味は配列集めです。

MAK君は毎日、配列場という配列を取ることができる場所に行き、配列探しに明け暮れています。配列場で取れる配列は全て長さがNで、全ての要素の値が1となっています。MAK君は長さがKより小さい配列しか運ぶことができないため、配列場で得られた配列の長さがKより小さくなるまで以下の操作を行います。ただし、操作前の配列をAとします。また、配列Aにおけるi番目の要素の値をAiと表すことにして、配列の番号は 1-indexed とします。

Aから長さKの連続な部分配列Bを取り除き、取り除いた部分に新たな値 x=D×B1×B2××BK を挿入する。

例えば、A={2,2,1,3,1}K=3D=2の場合、区間 2i4 について操作すると、A={2,12,1}、区間 3i5 について操作すると、A={2,2,6}になります。

長さがKよりも小さくなり、運べるようになった配列はMAK君の配列コレクション(Array Collection:通称 AC)に収納されます。しかし、MAK君は新しいものしか興味を示さないため、既に各要素が全て同じ配列が配列コレクションに収納されている場合、運ばれた配列は換金して自分のお小遣いにします。MAK君は配列集めを何回もしたため、得ることが可能な配列はすべて集めました。

MAK君は、配列コレクションに収納されている全ての配列の各要素の総和、すなわち、配列コレクションに収納されている配列の集合をS、配列の長さをLとしたときのASi=1LAi の値がどのようになっているのか気になりました。この値は非常に大きくなる場合があるため、1,000,000,007=109+7 で割ったときの余りを出力してください。

入力

N K D

2N106,2KN,1D106
N,K,Dは整数

出力

配列コレクションに収納されている全ての配列の各要素の総和を1,000,000,007で割ったときの余りを出力してください。最後に改行してください。

サンプル

サンプル1
入力
8 4 2
出力
14

MAK君が持っている配列コレクションは {1,4},{2,2},{4,1} の3つであり、出力する値は 1+4+2+2+4+1=14 となります。

サンプル2
入力
8 4 1
出力
2

MAK君が持っている配列コレクションは {1,1}1つだけです。

サンプル3
入力
12345 67 89
出力
967411319

出力する値は 1,000,000,007 で割ったときの余りであることに注意してください。

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。