「K ボナッチ数列」を解くために:part5 Scala編(paizaランク A 相当)
問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
問題
下記の問題をプログラミングしてみよう!
説明
前の問題では累積和を用いて N 項目を求める方法を紹介しました。
ここでは別の方法を紹介します。
前の問題と同様に、K ボナッチ数列の i 項目を KB_i とします。
N ≦ K の場合は K ボナッチ数列の定義より KB_N = 1 であるため、以下 N > K の場合を考えます。
KB_N = KB_{N-K} + KB_{N-K+1} + ... + KB_{N-2} + KB_{N-1} です。
同様に、KB_{N-1} = KB_{N-K-1} + KB_{N-K} + KB_{N-K+1} + ... + KB_{N-2} です。
この 2 つの式を用いて KB_N を高速に求める方法を考えてみましょう。
問題
整数 K と N が与えられるので、 K ボナッチ数列の N 項目を 10000 で割ったあまりを求めてください。
- 入力される値
-
入力は以下のフォーマットで与えられます。
K
N
・1 行目には 1 つの整数 K が与えられます。
・2 行目には 1 つの整数 N が与えられます。
・入力は 2 行となり、末尾に改行が 1 つ入ります。
入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。
標準入力からの値取得方法はこちらをご確認ください
- 期待する出力
答えを 1 行で出力してください。
最後は改行し、余計な文字、空行を含んではいけません。
- 条件
-
すべてのテストケースにおいて、以下の条件をみたします。
・1 ≦ K ≦ 100000
・K ≦ N ≦ 200000
問題一覧へ戻る