题解:SP28304 ADATEAMS - Ada and Teams
首先,我们分析一下题意是什么。从
现在的问题就是如何算这个式子。我们知道:
即:
所以我们可以提前处理出前缀和。但是,这里涉及除法,又要取模。所以我们要求逆元。不会的可以参考这道题的题解。
对于
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int mod=1e9+7;
ll n,a,b,d,fac[1000001];
int qpow(int a,int b){
int t=1;
ll c=a,r=1;
while(t<=b){
if(t&b){
r*=c;
r%=mod;
}
c*=c;
c%=mod;
t<<=1;
}
return r;
}
int inv(int p){
return qpow(p,mod-2);
}
ll c(ll x,ll y){
return 1ll*fac[x]*inv(fac[x-y])%mod*inv(fac[y])%mod;
}
int main(){
fac[0]=1;
for(int i=1;i<=1e6;i++){
fac[i]=fac[i-1]*i%mod;
}
while(~scanf("%lld%lld%lld%lld",&n,&a,&b,&d)){
printf("%lld\n",qpow(c(b,d),a)*c(n,a)%mod);
}
return 0;
}
好了,最后祝大家做题愉快,满屏 AC!