ABC 378

https://atcoder.jp/contests/abc378

A. Pairing

https://atcoder.jp/contests/abc378/tasks/abc378_a

B. Garbage Collection

https://atcoder.jp/contests/abc378/tasks/abc378_b

C. Repeating

https://atcoder.jp/contests/abc378/tasks/abc378_c

D. Count Simple Paths

https://atcoder.jp/contests/abc378/tasks/abc378_d

E. Mod Sigma Problem

https://atcoder.jp/contests/abc378/tasks/abc378_e

2026/1/23 解説 AC

void solve() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    ll N, M;
    cin >> N >> M;
    vll A(N);
    rep(i, N) cin >> A[i];

    vll cm(N + 1);
    rep(i, N) {
        cm[i + 1] = cm[i] + A[i];
        cm[i + 1] %= M;
    }

    fenwick_tree<ll> freq(M), cmcm(N + 1);
    rep(i, N) cmcm.add(i + 1, cm[i + 1]);

    ll ans = 0;
    rep2(i, 1, N + 1) {
        ans += i * cm[i];
        ans -= cmcm.sum(0, i);
        freq.add(cm[i], 1);
        ans += M * freq.sum(cm[i] + 1, M);
    }
    cout << ans << endl;
}

2026/2/18 解説 AC

void solve() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    ll N, M;
    cin >> N >> M;

    vll A(N);
    rep(i, N) cin >> A[i];
    vll cm(N + 1);
    rep(i, N) cm[i + 1] = (cm[i] + A[i]) % M;

    fenwick_tree<ll> fw(M);

    ll ans = 0;
    ll sum = 0;
    rep(r, N + 1) {
        ans += cm[r] * r - sum + fw.sum(cm[r] + 1, M) * M;
        sum += cm[r];
        fw.add(cm[r], 1);
    }
    cout << ans << endl;
}

F. Add One Edge 2

https://atcoder.jp/contests/abc378/tasks/abc378_f

G. Everlasting LIDS

https://atcoder.jp/contests/abc378/tasks/abc378_g