チャレンジ一覧に戻る
中級 0件解決済み 正答率0%

サイコロの出目列の個数を数える

指定された合計になる順序付きサイコロの出目列の個数を数えます。

このチャレンジで学べること

  • 小さな合計から答えを積み上げる
  • 最後の出目に注目した漸化式を書く
  • 大きな素数で割った余りを取る

問題

原文(英語)を表示

標準的なサイコロは1から6までの整数を出します。合計が target となる、空でない順序付きの出目列のすべてを数えてください。順序が異なれば別の列として数えます。個数を1,000,000,007で割った余りを返してください。

dice_combinations(target) を実装してください。

入力

target: すべての出目の合計となる値。

出力

列の個数を1,000,000,007で割った余りとして返してください。

制約

1 ≤ target ≤ 1,000,000。個数を1,000,000,007で割った余りを返すとは、その個数を1,000,000,007で割ったときの余りを返すことを意味します。

例

例 1
入力:
target = 2

期待される出力:
expected = 2
入力:
long long target = 2;

期待される出力:
long long expected = 2;
入力:
long target = 2;

期待される出力:
long expected = 2;

解説

2通りの列は [2] と [1, 1] です。

例 2
入力:
target = 4

期待される出力:
expected = 8
入力:
long long target = 4;

期待される出力:
long long expected = 8;
入力:
long target = 4;

期待される出力:
long expected = 8;

解説

列は [4], [1,3], [3,1], [2,2], [1,1,2], [1,2,1], [2,1,1], [1,1,1,1] です。

解き方のヒント

まずは自分で考えてから、ヒントを 1 つずつ開いてみましょう。

ヒント 1

小さい和を、目標値を作るための部品として考えます。

ヒント 2

各和は、直前の6個の和を使った累積で数えます。

ヒント 3

加算のたびに modulo を適用し、1未満の和は別扱いにします。

目安の計算量

時間 O(target)、追加メモリ O(target)

参考資料

この課題はCodeUtility用に調整されています。上記の説明と制約に従ってください。

他の人の解答から学ぶ

コミュニティの解答

まだ公開された解答がありません。この課題を解いて最初の解答を共有しましょう。