hannnnah_j’s Biological Test HDU

来源:互联网 发布:java如何定义字符数组 编辑:程序博客网 时间:2024/06/06 03:31

点击打开链接

挡板法求解 参考博客点击打开链接

#include <bits/stdc++.h>using namespace std;#define ll long long#define M 1000000007ll quickpow(ll a,ll b){    ll ans;    ans=1;    while(b>0)    {        if(b%2==1)        {            ans=(ans*a)%M;        }        a=(a*a)%M;        b/=2;    }    return ans;}ll getc(ll n,ll k){    ll ans,sum1,sum2,i,j;    sum1=1,sum2=1,i=n,j=1;    while(k--)    {        sum1=(sum1*i)%M;        sum2=(sum2*j)%M;        i--,j++;    }    ans=(sum1*quickpow(sum2,M-2))%M;    return ans;}int main(){    ll ans;    int t,n,m,k;    scanf("%d",&t);    while(t--)    {        scanf("%d%d%d",&n,&m,&k);        if(m==1)        {            printf("%d\n",n);            continue;        }        if(n<m+m*k)        {    printf("0\n");    continue;}        ans=(((getc(n-m*k-1,m-1)*n)%M)*(quickpow(m,M-2)%M))%M;        printf("%lld\n",ans);    }    return 0;}