fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define mod 1000000007
  4. long long a[1000009]={0},b[1000009]={0};
  5. long long invp(int a,int n)
  6. {
  7. if(a==1 || n==0)return 1;
  8. if(n==1)return a;
  9. long long t=invp(a,n/2);
  10. t=(t*t)%mod;
  11. if(n&1)
  12. t=(t*a)%mod;
  13. return t;
  14. }
  15. void initnum()
  16. {
  17. a[1]=a[0]=1;
  18. b[0]=b[1]=1;
  19. for(int i=2;i<=1000006;i++)
  20. a[i]=(a[i-1]*i)%mod;
  21. b[1000007]=1;
  22. for(int i=2;i<=1000007;i++)
  23. b[1000007]=(b[1000007]*invp(i,mod-2))%mod;
  24. for(int i=1000006;i>=2;i--)
  25. b[i]=(b[i+1]*(i+1))%mod;
  26. }
  27.  
  28. long long ncr(int n,int r)
  29. {
  30. return (((a[n]*b[r])%mod)*b[n-r])%mod;
  31. }
  32. int main()
  33. {
  34. initnum();
  35. // initdenum();
  36. int k;
  37. cin>>k;
  38. int c[1009]={0};
  39. for(int i=1;i<=k;i++)cin>>c[i];
  40. long long dp[1009]={0};
  41. dp[1]=1;
  42. int sum=c[1];
  43. for(int i=2;i<=k;i++)
  44. {
  45. dp[i]=dp[i-1];
  46. if(c[i]>1)dp[i]=(dp[i]*ncr(sum+c[i]-1,c[i]-1))%mod;
  47. sum+=c[i];
  48. }
  49. cout<<dp[k]<<endl;
  50. return 0;
  51. }
Success #stdin #stdout 1.92s 18768KB
stdin
4
1
2
3
4
stdout
1680