每个人的期望步数只与总数量 m m m,总人数 n n n,自己数量 a i a_i ai 有关
然后发现就是求 f f f, f f f 直接式子可以简单列出来。然后化简参见上一篇博客
最后考虑 g 0 g_0 g0 怎么算。 g 0 g_0 g0 本质是获得饼干的期望步数,因为概率 1 n − 1 \frac 1 {n-1} n−11,所以期望是 n − 1 n-1 n−1
n=read(); init(N-1);
for(i=1; i<=n; ++i) a[i]=read(), m+=a[i];
g[0]=n-1;
for(i=1; i<N; ++i) Add(g[i], g[i-1]*i%mo*(n-1)%mo*inv[m-i]%mo+m*(n-1)%mo*inv[m-i]%mo);
f[m]=0;
for(i=m-1; i>=0; --i) Add(f[i], g[i]+f[i+1]);
Add(ans, -(n-1)*f[0]);
for(i=1; i<=n; ++i) Add(ans, f[a[i]]);
Mul(ans, inv[n]);
printf("%lld", ans);