トピックポータル(内部タイトル84)
入力形式
二つの整数$ B、Kの$
出力フォーマット
答えを表す整数
サンプル
サンプル入力:
5 100
出力例:
280
データ範囲とヒント
答えは以下$ 10 ^ 7 $であることを確実にするために$ 40 \%の$のデータについては、
答えは以下$ 7 \タイムズ10 ^ 7 $であることを保証するために、別の$ 20 \%の$のデータについて、
別の$ 20 \%の$のデータについて、$ B = 2 $
$ 100 \%の$データ、$ K \は^ 7 10 leqslant B \は、15 $をleqslant、 10 $答えは^ {18} $未満であることを確認します
問題の解決策
私は試験の練習についてお話しましょう。
実際には、非常に暴力的な、キューの操作を行い、品質から各列挙子には、すべてのキューの数を乗じているだけで、最初の$ 1 $それはすることができます。
十分に大きい第一$ K $を探しシーケンスの最後の行は、うまく$ 80 $点、カード良い時間($ 10 ^ {18} $に掃引しない全て、別段$ TLE $)であることが期待します。
正の解のほかのようなポインタに小さな$ Bは$、$ B $を見つけました。
時間の複雑さ:$ \シータ(Bの\回K)$。
期待はスコア:$ $ 100ポイントを。
実際のスコア:$ $ 100ポイント。
コードの時間
#include <ビット/ STDC ++ H>
名前空間STDを使用して、
INT B、K、失敗[] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}。
INT PRI [] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47}。
長い長いS [10000001]。
メインINT()
{
scanf関数( "%d個の%のD"、&B、&K)。
S [1] = 1。
以下のために(INT I = 2; iは= Kを<; iは++)
{
長い長フラグ= 0x3f3f3f3f3f3f3f3f。
用(int型J = 0; J <B; J ++)
{
場合に失敗[J] ++(複数可* PRI [J] == sは[I-1] [j]をフェイル])。
フラグ=秒(複数可* PRI [J] <フラグ[J]失敗])の場合* PRI [J] [j]の失敗]。
}
S [I] =フラグ。
}
のprintf( "%のLLD"、S [K])。
0を返します。
}
RP ++