Desserts
[link](Problem - G - Codeforces)
题意
给你
n
n
n堆糖果每堆有
a
i
a_i
ai个糖,人数依次从
1
1
1到
m
m
m,每个人每种糖果最多拿一个,让你求出人数从
1
1
1到
m
m
m把糖果分完分别有多少种分法。
题解
每个人拿每种糖是独立的,所以当人数为
k
k
k时的答案为
∏
i
=
1
n
C
k
a
i
prod_{i=1}^{n} C_{k}^{a_i}
∏i=1nCkai,这样的话枚举人数再枚举糖果至少是个
O
(
n
2
)
O(n^2)
O(n2)的。发现题中保证
∑
i
=
1
n
a
i
≤
1
×
1
0
5
sum_{i=1}^{n}a_ile1times 10^5
∑i=1nai≤1×105,假设每堆糖果数量都不同也就是
0
+
1
+
2
+
3
+
4
+
.
.
.
+
x
≤
1
×
1
0
5
0+ 1+2+3+4+...+x le1times 10^5
0+1+2+3+4+...+x≤1×105,通过上式发现糖果最多有根号种,直接枚举每种不同的
a
i
a_i
ai,相同的
a
i
a_i
ai快速幂贡献在一起即可。
Code
#include
#include
#include
#include
#include
#include
#include
#include