codeforces Kyoya and Colored Balls

题解见:http://blog.csdn.net/libin56842/article/details/46650209

注意这里的组合数取模~~~

 1 /*Author :usedrose  */
 2 /*Created Time :2015/8/7 13:31:44*/
 3 /*File Name :2.cpp*/
 4 #pragma comment(linker, "/STACK:1024000000,1024000000") 
 5 #include <cstdio>
 6 #include <iostream>
 7 #include <algorithm>
 8 #include <sstream>
 9 #include <cstdlib>
10 #include <cstring>
11 #include <climits>
12 #include <vector>
13 #include <string>
14 #include <ctime>
15 #include <cmath>
16 #include <deque>
17 #include <queue>
18 #include <stack>
19 #include <set>
20 #include <map>
21 #define INF 0x3f3f3f3f
22 #define eps 1e-8
23 #define pi acos(-1.0)
24 #define MAXN 1110
25 #define MAXM 1000110
26 #define OK cout << "ok" << endl;
27 #define o(a) cout << #a << " = " << a << endl
28 #define o1(a,b) cout << #a << " = " << a << "  " << #b << " = " << b << endl
29 using namespace std;
30 typedef long long LL;
31 
32 LL n;
33 LL a[MAXN];
34 LL fac[MAXM];
35 const LL mod = 1e9+7;
36 
37 LL quick_pow(LL a, LL b)
38 {
39     LL c = 1;
40     while (b) {
41         if (b&1) c = c*a%mod;
42         b >>= 1;
43         a = a*a%mod;
44     }
45     return c%mod;
46 }
47 
48 LL calc(LL m,LL i)
49 {
50     return ((fac[m]%mod)*(quick_pow((fac[i]*fac[m-i])%mod, mod-2)%mod))%mod;
51 }
52 
53 int main()
54 {
55     //freopen("data.in","r",stdin);
56     //freopen("data.out","w",stdout);
57     cin.tie(0);
58     ios::sync_with_stdio(false);
59     fac[0] = 1;
60     for (int i = 1;i < MAXM; ++ i)
61         fac[i] = (fac[i-1]*i)%mod;
62     LL ans = 1, sum = 0;
63     cin >> n;
64     for (int i = 1;i <= n; ++ i) {
65         cin >> a[i];
66         sum += a[i];
67     }
68     for (int i = n;i >= 1;-- i) {
69         ans *= calc(sum-1, a[i]-1);
70         ans %= mod;
71         sum -= a[i];
72     }
73     cout << ans << endl;
74     return 0;
75 }
View Code
原文地址:https://www.cnblogs.com/usedrosee/p/4710555.html