L先生与数列 组合数

来源:互联网 发布:php的转义字符有哪些 编辑:程序博客网 时间:2024/04/29 19:31

Description

L先生又遇到了一道数学难题,你能帮助他吗。

在连续自然数数列列[a, b]之间选择n个不重复的数,要求它们的和为奇数,有多少种选法?

Input

多组测试数据,处理到文件结束。(测试数据数量<50)
每行有一个测试例,分别是a、b和n,且满足0<=b-a<=40,0

Output

对于每个测试例,输出一行代表其具有的组合个数。

Sample Input

11 19 2
11 19 3

Sample Output

20
40

Hint

题意

题解:

固定奇数1.3.5…..然后求组合数 不满足的不算

AC代码

#include <cstdio>#include <set>#include <algorithm>using namespace std;#define ll long longll C[40][40];void set_init(){    for (int i = 0; i<40;++i) C[i][0] = C[i][i] = 1;    for (int i = 2; i < 40; ++i){        for (int j = 1; j < i; ++j){            C[i][j] = C[i-1][j]+C[i-1][j-1];        }    }}int main(){    set_init();    ll a,b,n;    while (~scanf("%lld%lld%lld",&a,&b,&n)){        ll d = b-a+1;        if (n > d) printf("0\n");        else if (b < a) printf("0\n");        else {            ll na = (b-a+1)/2;            ll nb = (b-a+1)/2;            if (!(a&1)&&!(b&1)) nb+=1;            if ((a&1)&&(b&1)) na+=1;            ll ans = 0;            for (ll i = 1; i <= n; i+=2){                if (i > na||n-i<0) break;                ans+=C[na][i]*C[nb][n-i];            }            printf("%lld\n",ans);        }    }    return 0;}
原创粉丝点击