HDU 2519 新生晚会

HDU 2519 新生晚会

题目中用到组合的方法

{利用组合的上面第三个原理,可以很快的减少组合式中乘数的使用,本题还有一个要注意的地方就是在数据存储方式,由于阶乘的结果会很大,计算过程中可以使用到一边进行乘法运算一边进行除法运算,降低数据量}

#include <iostream>
using namespace std;

__int64 zu (__int64 a,__int64 b)  //使用__int64位整形存储 存储范围在2^64

 __int64 m=1;
 __int64 i;
 if(a<b)
  return 0;
 if(a==b||a==0)
  return 1;
 if(a-1==b||b==1)
  return a;

 for(i=1;i<=a-b;i++)     //简化组合代码C n r=C n-r r    
 {
  m=m*(b+i)/i;        //乘数与除数相同,一边乘数一边除数
 }
 return m;
}

int main()
{
 int n;
 __int64 a,b;
 cin>>n;
 while(n--)
 {
  scanf("%I64d",&a);
  scanf("%I64d",&b);
  printf("%I64d\n",zu(a,b));
 }
 return 0;
}

原文地址:https://www.cnblogs.com/jacklove/p/2648537.html