いくつかの暴力の組み合わせを求めてPOJ 1306

組み合わせ
制限時間: 1000ミリ秒   メモリの制限: 10000K
合計提出: 11049   受け入れ: 5013

説明

Nの物事が一度にMを撮影することができます方法の正確な数を計算することはNおよび/またはMが非常に大きくなって大きな挑戦することができます。課題は、コンテストのものです。したがって、あなただけのような計算を与え作るために、次のとおりです
あるとします。5 <= N <= 100; 5 <= M <= 100。M <= N
計算の正確な値:C = N!/(NM)!M!
あなたは、Cの最終値は、32ビットのパスカル倍長整数または長いCに収まることを仮定してもよいです。記録のために、100の正確な値!ある:
93,326,215,443,944,152,681,699,238,856,266,700,490,715,968,264,381,621、468,592,963,895,217,599,993,229,915,608,941,463,976,156,518,286,253、697,920,827,223,758,251,185,210,916,864,000,000,000,000,000,000,000,000

入力

このプログラムへの入力は、一つ以上の線をそれぞれ含むゼロ個以上の先行スペース、N、一つ以上のスペースの値、およびM.値ダミーN、M対を含有する入力ファイルの最後の行になりますゼロに等しい両方の値を持ちます。この行が読み込まれたとき、あなたのプログラムが終了する必要があります。

出力

このプログラムからの出力は、形式にする必要があります:
N時点でM撮影したものは、まさにCです。

サンプル入力

100 6 
20 5 
18 6 
0 0

サンプル出力

一度に6撮影した100物事は正確に1192052400です。
一度に5撮影した20件の事は正確に15504です。
一度に6撮影した18件の事は正確に18564です。

質問の意味:

入力N、K、その後、ライン上の組み合わせの数を数えるには、キーは:タイトル「あなたがCの最終値は、32ビットに収まることを仮定してもよい」、それは非常に退屈です。

ACコード:

書式#include <cstdioを>
 使用して 名前空間はstdを、
typedefの長い 長いLL。
LLのC [ 110 ] [ 110 ]。
ボイド)(調製
{ 
    ためint型 I = 0 ; I <= 110 ; iは++)C [i]が[ 0 ] = 1 ;
    以下のためにint型 i = 1 ; iは= < 110 I ++; のためのINT J = 1 ; J <= 110 ; J ++ 
            C [I] [J] = Cの[I- 1を] [J] + C [I- 1 ] [J- 1 ]。
} 
int型のmain()
{ 
    // freopenは( "INPUT.TXT"、 "R"、STDIN)。
    準備()。
    LL N、K。
    一方、(〜のscanf(" %のLLDの%のLLD "、&​​N&K)&& N)
    { 
        のprintf(" LLDものが一度%のLLDを取っ%は%LLD正確である。\ n " [N、K、C [N] K])。
    } 
    戻り 0 
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/cautx/p/11404467.html