組み合わせ
制限時間: 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
あるとします。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です。
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 。 }