题面

你有 $n$ 个数 $a_1,a_2,\dots,a_n$ 要进行 $k$ 次操作,每次随机选择一个数 $x \in [1,n]$ ,把 $a_x$ 减一,并将答案增加除 $a_x$ 外所有数的乘积。

求最终答案的期望,答案对 $10^9 + 7$ 取模。

题解

设最终 $a_i$ 的减少量为 $b_i$ ,可以把答案转化为 $\prod_{i=1}^na_i-\prod_{i=1}^n(a_i-b_i)$ 。于是即求 $\prod_{i=1}^n(a_i-b_i)$ 的期望值。

这里 $\sum b_i=k$ ,于是明显有

$$\begin{aligned}\mathbb{E}&=\frac{1}{n^k}\binom{k}{b_1,b_2,\cdots,b_n}\prod_{i=1}^n(a_i-b_i)\\ &=\frac{k!}{n^k}\prod_{i=1}^n\frac{a_i-b_i}{b_i!}\end{aligned}$$

对后面那个积用 EGF 处理

$$\begin{aligned}\hat f_i(x)&=\sum_{j=0}\frac{a_i-j}{j!}x^j\\ &=\sum_{j=0}\left(\frac{a_i}{j!}x^j-\frac{x\cdot x^{j-1}}{(j-1)!}\right)\\ &=(a_i-x)e^x\end{aligned}$$

$$\begin{aligned}\hat F(x)&=\prod_{i=1}^n\hat f_i(x)\\ &=e^{nx}\prod_{i=1}^n(a_i-x)\end{aligned}$$

答案求 $\frac{k!}{n^k}[x^k]\hat F(x)$ 。先考虑把 $\hat F(x)$ 拆为两部分,exp 那部分为 $\sum \frac{n^i}{i!}$ ,另一部分可以令

$$G(x)=\prod_{i=1}^n(a_i-x)=\sum_{i=0}^nc_ix^i $$

$$[x^k]\hat F(x)=\sum_{i=0}^nc_i\frac{n^{k-i}}{(k-i)!} $$

$n$ $\mathcal{O}(n^2)$ 即可。

const int N = 5e3 + 5, mod = 1e9 + 7;

inline ll Read() {
	ll x = 0, f = 1;
	char c = getchar();
	while (c != '-' && (c < '0' || c > '9')) c = getchar();
	if (c == '-') f = -f, c = getchar();
	while (c >= '0' && c <= '9') x = (x << 3) + (x << 1) + c - '0', c = getchar();
	return x * f;
}

namespace Main {
	int n, m;
	ll a[N], f[N];
	ll qpow (ll a, int b) {
		ll ans = 1ll;
		for (; b; b >>= 1, a = 1ll * a * a % mod)
			if (b & 1) ans = 1ll * ans * a % mod;
		return ans;
	}
	int main () {
		n = Read(), m = Read();
		f[0] = 1;
		for (int i = 1; i <= n; i++) {
			a[i] = Read();
			for (int j = i; j; j--) f[j] = (1ll * f[j] * a[i] - f[j - 1] + mod) % mod;
			f[0] = 1ll * f[0] * a[i] % mod;
		}
		ll ans = 0, fac = 1, inv = qpow (n, mod - 2);
		for (int i = 0; i <= n; ++i) {
			ans = (ans + f[i] * fac) % mod;
			fac = fac * (m - i) % mod * inv % mod;
		}
		printf ("%lld\n", (f[0] - ans + mod) % mod);
		return 0;
	}
}

int main () {
//	freopen(".in", "r", stdin);
//	freopen(".out", "w", stdout);
	Main::main();
	return 0;
}
EOF

评论

暂无评论

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。

博客信息

作者
Jayun
时间
2024-02-12 12:17:05
博客类型