组合数计算(不爆 LL 时)
ll C(int n,int m)
{
if(m>n) return 0;
double sum=0; // ln( C(n,m) )
for(int i=m+1;i<=n;i++) sum+=log(i);
for(int i=1;i<=n-m;i++) sum-=log(i);
ll ans=(ll)(exp(sum)+0.5);
return ans;
}
ll C(int n,int m)
{
if(m>n) return 0;
double sum=0; // ln( C(n,m) )
for(int i=m+1;i<=n;i++) sum+=log(i);
for(int i=1;i<=n-m;i++) sum-=log(i);
ll ans=(ll)(exp(sum)+0.5);
return ans;
}