【悬 5 关】T3 50pts 怎么回事
  • 板块学术版
  • 楼主Iamzzr
  • 当前回复14
  • 已保存回复14
  • 发布时间2022/10/23 12:33
  • 上次更新2023/10/27 06:20:40
查看原帖
【悬 5 关】T3 50pts 怎么回事
527243
Iamzzr楼主2022/10/23 12:33

rt,代码:

#include <iostream>

using namespace std;
#define int long long

const int N = 1000010;
const int mod = 998244353;

int n, k;
int a[N];
int sum[N], squ[N];

int read() {
    int x = 0, f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') { f = (ch == '-' ? -1 : f); ch = getchar(); }
    while (ch >= '0' && ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); }
    return x * f;
}

signed main() {
    //freopen("ex.in", "r", stdin);
    //freopen("ex.out", "w", stdout);
    n = read(), k = read();
    int dis = 1;
    for (int i = 1; i <= n; i++) {
        a[i] = read();
        sum[i] = sum[i - 1] + a[i], squ[i] = squ[i - 1] + a[i] * a[i];
        sum[i] %= mod, squ[i] %= mod;
        if (a[i] >= 0 && a[i - 1] < 0) dis = i;
    }
    int ans = 0;
    for (int i = 1; i <= n; i++) ans = ((a[i] + 1) * (a[i] + 1) % mod + ans) % mod;
    //if (k == 1) { cout << ans << endl; return 0; }
    for (int i = 2; i <= k; i++) {
        int val1 = (squ[n] - squ[dis - 1]) % mod;
        int val2 = (sum[n] - sum[dis - 1]) % mod;
        val2 = (val2 * (2 * i) % mod) % mod;
        int val3 = (n - dis + 1) * ((i * i) % mod) % mod;
        //cout << val1 << " " << val2 << " " << val3 << " ";
        ans = ((val1 + val2 + val3) % mod + ans) % mod;
        //cout << ans << endl;
    }
    int res = 0;
    for (int i = 1; i < dis; i++) res = (res + (a[i] + 1) * (a[i] + 1) % mod) % mod;
    res = (res * (k - 1)) % mod;
    ans = (ans + res) % mod;
    cout << ans << endl;
    return 0;
}
2022/10/23 12:33
加载中...