您的位置:首页 > 其它

NYOJ---1131买水果

2015-04-06 21:38 134 查看


买水果

时间限制: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);
样例输入
2
4 2
3 3


样例输出
6
1


上传者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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: