問題一覧 > 通常問題

No.42 貯金箱の溜息

レベル : / 実行時間制限 : 1ケース 5.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 68
作問者 : LayCurse
9 ProblemId : 22 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2015-11-14 17:47:16

問題文

太郎くんは日本国に住んでいます。
この国では、1 円玉、5 円玉、10 円玉、50 円玉、100 円玉、500 円玉の 6 種類の硬貨が使われています。

貯金箱くんは硬貨を貯めに貯めて、1 円玉も 5 円玉も 10 円玉も 50 円玉も 100 円玉も 500 円玉も、1020 枚以上持っています。
しかし、太郎くんが M 円のお買い物したかったのです。
太郎くんは、貯金箱くんに合計でちょうど M 円分の硬貨をくれるように頼みました。
貯金箱くんは、せっかく貯めた硬貨をあげるのを渋り、問題に答えられたらあげることにしました。
貯金箱くんは、「僕が M 円をあげるために渡さなければいけない最小の硬貨の枚数は何枚?」という問題を出しましたが太郎くんは一瞬で答えてしまいました。
そこで、もう 1 問、貯金箱くんは、「僕が M 円をあげるために硬貨を渡す方法は何通り?」という問題に切り替えました。
今度は太郎君が困ってしまいました。
あなたは、貯金箱くんが M 円を太郎くんに渡す方法のパターン数を 109+9 で割った余りを求めるプログラムを書いて下さい。

入力

T
M1
M2

MT

1T10000 はテストケースの数を表す。
1Mk1018 は各テストケースにおける M の値を表す。

出力

出力の k 行目では貯金箱くんが Mk 円を太郎くんに渡す方法のパターン数を 109+9 で割った余りを出力して下さい。

サンプル

サンプル1
入力
4
10
100
1000000000
1000000000000000000
出力
4
159
248167937
266325766

10 円を渡す方法は、
1 円玉を 10
1 円玉を 5 枚、5 円玉を 1
5 円玉を 2
10 円玉を 1
4 通りの方法があります。

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