专栏文章

AT_abc399_f

题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miprjrnr
此快照首次捕获于
2025/12/03 16:46
3 个月前
此快照最后确认于
2025/12/03 16:46
3 个月前
查看原文
感觉赛时脑梗了
si=1jiajs_i = \sum\limits_{1 \le j \le i} a_j
i>j1(sisj)k\sum\limits_{i > j \ge 1}(s_i - s_j) ^ k
=i>j10lk(kl)silsjkl(1)kl= \sum\limits_{i > j \ge 1}\sum\limits_{0\le l \le k} \binom{k}{l} s_i^l s_j^{k - l}(-1)^{k - l}
=0lk(kl)(1)klsil1j<isjkl= \sum\limits_{0\le l \le k} \binom{k}{l}(-1)^{k-l}s_i^l \sum\limits_{1\le j < i}s_j^{k - l}
计算时维护1j<isjkl\sum\limits_{1 \le j < i} s_j ^ {k - l}
最后再加上sik\sum s_i^k即可
code:
CPP
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int maxn = 2e5 + 5, mod = 998244353;
int sum[maxn], val[15], n, k;
int c[15][15];
void init() {
	c[0][0] = 1;
	for (int i = 1; i <= 10; ++i) {
		for (int j = 0; j <= 10; ++j) {
			c[i][j] = c[i - 1][j];
			if (j) c[i][j] += c[i - 1][j - 1];
			c[i][j] %= mod;
		}
	}
}
int qpow(int a, int b) {
	int res = 1;
	for (int t = a; b; b >>= 1, t = (t * t) % mod) {
		if (b & 1) res = (res * t) % mod;
	}
	return res;
}
int add(int x, int y) {
	// return x + y;
	return ((x + y) % mod + mod) % mod;
}
signed main() {
	cin >> n >> k;
	init();
	for (int i = 1; i <= n; ++i) {
		int x; cin >> x;
		sum[i] = add(sum[i - 1], x);
	}
	int ans = 0;
	for (int i = 1; i <= n; ++i) {
		for (int l = 0; l <= k; ++l) {
			int cur = val[k - l];
			int f = (c[k][l] * ((k - l) & 1 ? -1 : 1) + mod) % mod;
			ans = add(ans, f * qpow(sum[i], l) % mod * cur % mod);
		}
		for (int l = 0; l <= k; ++l) {
			val[l] = add(val[l], qpow(sum[i], l));
		}
	}
	for (int i = 1; i <= n; ++i) {
		ans = add(ans, qpow(sum[i], k));
	}
	cout << ans << endl;
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...