554C - Kyoya and Colored Balls
思路:组合数,用乘法逆元求。
代码:
#include<bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define mem(a,b) memset(a,b,sizeof(a)) const int MOD=1e9+7; const int N=1e6+5; int a[1005]; ll fact[N]={1}; ll qpow(ll n,ll k) { ll ans=1; while(k) { if(k&1)ans=(ans*n)%MOD; k>>=1; n=(n*n)%MOD; } return ans; } ll C(ll n,ll k) { ll ans=fact[n]; ans=((ans*qpow(fact[n-k],MOD-2))%MOD*qpow(fact[k],MOD-2))%MOD; return ans; } int main() { ios::sync_with_stdio(false); cin.tie(0); int n,sum=0; cin>>n; for(int i=1;i<=n;i++)cin>>a[i],sum+=a[i]; for(ll i=1;i<N;i++) fact[i]=(fact[i-1]*i)%MOD; ll ans=1; for(int i=n;i>=1;i--) { ans=(ans*C(sum-1,a[i]-1))%MOD; sum-=a[i]; } cout<<ans<<endl; return 0; }