題目概述
求
時限
1000ms/3000ms
輸入
每行兩個整數N,M
限制
最終結果在32位整數範圍內
輸出
每行一個數,爲結果
樣例輸入
4 2
10 5
49 6
0 0
樣例輸出
6
252
13983816
討論
水題,本來以爲真的會測試極端情況,N=INT_MAX,M=INT_MAX/2,不過由於結果在32位內,即便是最壞的情況,N也不超過40,具體是多少沒有細算,反正絕對是水題了
順便一提,題解是基於這個公式的
題解狀態
164K,16MS,C++,487B
題解代碼
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define INF 0x3f3f3f3f
#define MAXN 1004
#define memset0(a) memset(a,0,sizeof(a))
#define long long long
int N, M;
long C()
{
if (M > N / 2)
M = N - M;
long a = 1;
for (int p = 1; p <= M; p++) {
a *= N - p + 1;
a /= p;
}
return a;
}
int main(void)
{
//freopen("vs_cin.txt", "r", stdin);
//freopen("vs_cout.txt", "w", stdout);
while (~scanf("%d%d", &N, &M) && (N || M))//input
printf("%lld\n", C());//output
}
EOF