题解 CF850F 【Rainbow Balls】
首先可以枚举最后的球都是什么颜色的
设
显然
设
对于
其中
注意不是
结论就是
考虑 下面纯属瞎bb
由于不能到
那么
也就是数轴上一个点
这个是个经典问题
设
那么
可以得到概率为
瞎bb完了
那么现在有一个方程
由于
即
由
所以
代入
那么求出
最后答案就是
# include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod(1e9 + 7);
const int maxn(1e5 + 5);
int mx = 1e5, n, cnt[maxn], sum, f[maxn], ans;
inline void Inc(int &x, int y) {
if ((x += y) >= mod) x -= mod;
}
inline int Pow(ll x, int y) {
register ll ret = 1;
for (; y; y >>= 1, x = x * x % mod)
if (y & 1) ret = ret * x % mod;
return ret;
}
int main() {
scanf("%d", &n);
register int i;
for (i = 1; i <= n; ++i) scanf("%d", &cnt[i]), sum += cnt[i];
f[1] = 1LL * (sum - 1) * (sum - 1) % mod * Pow(sum, mod - 2) % mod;
f[2] = (2 * f[1] % mod + mod - 1) % mod;
for (i = 2; i < mx; ++i)
f[i + 1] = ((2 * f[i] % mod - f[i - 1] + mod) % mod - 1LL * (sum - 1) * Pow(sum - i, mod - 2) % mod + mod) % mod;
for (i = 1; i <= n; ++i) Inc(ans, f[cnt[i]]);
printf("%d\n", ans);
return 0;
}