[组合数学][✗✓OI R1] 后方之水

\(\texttt{link}\)

首先易知合并的代价是唯一的,\(f(a_1,...,a_n) = \dfrac 1 2 \sum\limits_{i=1}^na_i(s-a_i)\)

考虑计算每个位置对答案的贡献,有:

\[\begin{aligned}ans &= \dfrac n 2 \sum\limits_{i=1}^{s-n+1}i(s-i)\dbinom{s-i-1}{n-2} \\ &=\dfrac n 2 \sum\limits_{i=1}^{s-n+1}\dfrac{i(s-i)(s-i-1)!}{(n-2)!(s-i-(n-1))!} \\ &= \dfrac n 2 \sum\limits_{i=1}^{s-n+1}\dfrac{(n-1)i(s-i)!}{(n-1)!(s-i-(n-1))!}\\&= \dfrac n 2 \sum\limits_{i=1}^{s-n+1}(n-1)i\dbinom{s-i}{n-1}\end{aligned} \]

移项,得到:

\[\dfrac{2ans}{n(n-1)}=\sum\limits_{i=1}^{s-n+1}i\dbinom{s-i}{n-1} \]

现在问题变成了求右式,交换一下枚举的 \(i\)\(s-i\),右式变为

\[\begin{aligned}\sum\limits_{i=n-1}^{s-1}(s-i)\dbinom{i}{n-1} &= s\sum\limits_{i=n-1}^{s-1}\dbinom{i}{n-1} - \sum\limits_{i=n-1}^{s-1}i\dbinom{i}{n-1}\\ &= (s+1)\sum\limits_{i=n-1}^{s-1}\dbinom{i}{n-1} - \sum\limits_{i=n-1}^{s-1}(i+1)\dbinom{i}{n-1}\end{aligned} \]

\(\sum\limits_{i=n-1}^{s-1}\dbinom{i}{n-1}\) 可以看作是杨辉三角一列的求和,等价于 \(\dbinom{s}{n}\)

后面减去的柿子再继续推:

\[\begin{aligned}\sum\limits_{i=n-1}^{s-1}(i+1)\dbinom i {n-1} &= \sum\limits_{i=n-1}^{s-1}\dfrac{(i+1)!}{(n-1)!(i-(n-1))!} \\&=n\sum\limits_{i=n-1}^{s-1}\dbinom{i+1}{n}\end{aligned} \]

同样的,\(\sum\limits_{i=n-1}^{s-1}\dbinom{i+1}{n}\) 等价于 \(\dbinom{s+1}{n+1}\)

于是答案为

\[ans = \dfrac{n(n-1)}{2}((s+1)\dbinom{s}{n} - n\dbinom{s+1}{n+1}) \]

\(\texttt{Code:}\)

#include <bits/stdc++.h>

using namespace std;

const int cmd = 998244353;
const int N = 1e6 + 5;

int inv[N];

int C(int n, int m) {
	int res = 1;
	for (int i = n; i >= n - m + 1; i--) res = 1ll * res * i % cmd;
	for (int i = 2; i <= m; i++) res = 1ll * res * inv[i] % cmd;
	return res;
}

int main() {
   	int T; scanf("%d", &T);
   	inv[1] = 1;
   	for (int i = 2; i <= 1000001; i++) inv[i] = 1ll * (cmd - cmd / i) * inv[cmd % i] % cmd;
   	while (T--) {
   		int n, s; scanf("%d%d", &n, &s);
   		if (n > s) {puts("0"); continue;}
   		int ans = 1ll * n * (n - 1) / 2 % cmd * (1ll * (s + 1) * C(s, n) % cmd - 1ll * n * C(s + 1, n + 1) % cmd) % cmd;
   		printf("%d\n", (ans % cmd + cmd) % cmd);
   	}
    return 0;
}
posted @ 2021-11-14 20:38  klii  阅读(182)  评论(0)    收藏  举报