BZOJ 3398:[Usaco2009 2月] Bullcow牛や雄牛

タイトル説明

    ジョンは展示会での集会に出席するためにN(1≤N≤100000)牛を取るために、これらの牛は牛することができ、牛をすることができます。牛は、行に立つ必要があります。雄牛は、トラブルの牛がうまくいかないようにするために積極的である。しかし、ジョンは唯一の任意の二つの牛の牛の間に少なくともK(O≤K<N)を持つことにしました。
    キューイングどのように多くの点の合計を計算してください。すべての牛は、あまりにも、同じ、すべての牛として見ることができます。5000011剰余への答え

エントリー

    ライン入力2つの整数NとK.

輸出

 
    キューに入れられたメソッドの数を表す整数。

サンプル入力

4 2

サンプル出力

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を返します。
}

 

おすすめ

転載: www.cnblogs.com/mysh/p/11318703.html