NYOJ---1131买水果

来源:互联网 发布:淘宝违规产品被删除了 编辑:程序博客网 时间:2024/05/01 06:51

买水果

时间限制:1000 ms  |  内存限制:65535 KB
难度:0
描述

       今天zz突然想吃水果了,然后他到超市去买水果,现超市有n个不同的水果,zz要买m个水果

(m<=n);那么zz有多少种买水果的方式??

输入
输入T组数据(T<=100)
然后输入T行,每行输入两个数n,m(0< n < 2^31);
输出
每一行输出一个数(保证在0~2^31);
样例输入
24 23 3
样例输出
61
上传者
ACM_张书军
分析:这是一道数学上的排列组合问题,另外数字比较大需要用到longlong的类型.
#include<iostream>#include<stdio.h>#include<string.h>using namespace std;int main(){    long long n,m;    long long a,b,sum;    int test;    cin>>test;    while(test--)    {        sum=1;        scanf("%lld%lld",&n,&m);        if(n-m<m)            m=n-m;                    //使时间复杂度降了下来C(n,m)=C(n,n-m);如果没有的话会超时            b=m;        for(long long i=n;i>n-m;i--)        {            sum=sum*i;            while(sum%b==0&&b>1)      //分子下面的从m到1的连乘            {                sum=sum/b;                b--;            }        }        printf("%lld\n",sum);    }}


0 0