题意:格路问题 没什么难度 难点在于如何快速计算相对较大的组合数
思路:运用手写计算组合数的方式进行计算 如c(8,3) 如果手算就是 8*7*6/(3*2*1)这样可以很快得解出
计算代码为:(精度没问题? 反正能过)
u c(u n,u m){
u a=n+m;
u b=min(n,m);
double ans=;
while(b>){
ans*=(1.0*a--)/(1.0*b--);
}
ans+=0.5;//四舍五入
return u(ans);
}
AC代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;
const int maxn=;
typedef unsigned u;
u c(u n,u m){
u a=n+m;
u b=min(n,m);
double ans=;
while(b>){
ans*=(1.0*a--)/(1.0*b--);
}
ans+=0.5;
return u(ans);
}
int main(){ u a,b;
while(scanf("%u%u",&a,&b)==){
if(!a&&!b)break;
printf("%u\n",c(a,b));
}
return ;
}