AT_abc399_f
alexbear103 · · 题解
感觉赛时脑梗了
记
计算时维护
最后再加上
code:
#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;
}