タイトル説明
ジョンは展示会での集会に出席するためにN(1≤N≤100000)牛を取るために、これらの牛は牛することができ、牛をすることができます。牛は、行に立つ必要があります。雄牛は、トラブルの牛がうまくいかないようにするために積極的である。しかし、ジョンは唯一の任意の二つの牛の牛の間に少なくともK(O≤K<N)を持つことにしました。
キューイングどのように多くの点の合計を計算してください。すべての牛は、あまりにも、同じ、すべての牛として見ることができます。5000011剰余への答え
エントリー
ライン入力2つの整数NとK.
輸出
キューに入れられたメソッドの数を表す整数。
サンプル入力
4 2
サンプル出力
6
サンプルを示す
女性女性女性女性、男性女性女性女性、女性は男性女性女性、女性女性男性女性、女性女性男性女性、男性女性男性女性:6つのメソッドであります
サンプルを示す
女性女性女性女性、男性女性女性女性、女性は男性女性女性、女性女性男性女性、女性女性男性女性、男性女性男性女性:6つのメソッドであります
プロンプト
ソース
考え
N /(K + 1)雄牛までのリリース
のn%(K + 1)した場合!= 0のn /(K + 1)+1頭を置くことができ、シンプルであることが判明しました。
それはkが残っている* n個のマイナス( - 1)と同じであるので、我々は、(a-1)* k個の雌牛を雄牛のニーズを入れ、牛の上限を置くことができます牛の頭の列挙に1から番号を付けますポジションの牛の数は下に置くことができる
プログラムの放電回数強気である
、本明細書に記載の挿入写真
ので直接計算することができます
**リンク記述します。https://blog.csdn.net/qq_43346903/article/details/82996920を
コード:
#include <cmath> の#include <cstdioを> する#include <CStringの> する#include <iostreamの> する#include <アルゴリズム> 名前空間STDを使用して、 const int型のMod = 5000011; 長い長いN、K、ANS。 長い長いqpow(長い長い、長い長いB){ 長い長いANS = 1。 用(; B; B >> = 1){ IF(B&1) ANS = ANS *%のMod。 = A *%のMod。 } 戻りANS。 } 長い長いC(長い長M、長い長N){ 長い長いSUM1 = 1、SUM2 = 1。 (M> nm)の場合 、M = NM。 {(; I <= M I ++が長い長いI = 1)のための (SUM1 * =(N-I + 1))%=モッド。 (SUM2 * = I)%=モッド。 } 戻り(SUM1 * qpow(SUM2、モッド-2))%のMod。 } INTメイン(){ scanf関数( "%のLLDの%のLLD"、&N&K)。 長い長いMAXN = N /(K + 1)。 もし(MAXNは*(K + 1)= N!) MAXN ++; 以下のために(INT I = 1; I <= MAXN; iは++) ANS =(ANS%モッド+ C(I、NK * I + K)%MOD)%のMod。 printf( "%LLDする\ n"、(ANS + 1)%MOD)。 0を返します。 }