poj 2249 && uva 530

題目概述

CMN

時限

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,具體是多少沒有細算,反正絕對是水題了
順便一提,題解是基於這個公式的

Cmn=nm+1mCm1n

題解狀態

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

發佈了208 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章