Cod sursa(job #3314155)

Utilizator xxoctavianDumitrica Octavian Teodor xxoctavian Data 8 octombrie 2025 18:45:54
Problema Divk Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <bits/stdc++.h>
using namespace std;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int N, K, A, B;
    if (!(cin >> N >> K >> A >> B)) return 0;
    vector<int> v(N+1);
    for (int i = 1; i <= N; ++i) cin >> v[i];

    // prefix modulo K
    vector<int> P(N+1);
    long long sum = 0;
    P[0] = 0;
    for (int i = 1; i <= N; ++i) {
        sum += v[i];
        int m = (int)(sum % K);
        if (m < 0) m += K;
        P[i] = m;
    }

    vector<int> freq(K);
    long long ans = 0;

    for (int r = 1; r <= N; ++r) {
        int idx_add = r - A;       // adaugam l = r-A in multime (daca >=0)
        if (idx_add >= 0) {
            ++freq[P[idx_add]];
        }
        int idx_rem = r - B - 1;  // scoatem l = r-B-1 (daca >=0)
        if (idx_rem >= 0) {
            --freq[P[idx_rem]];
        }
        // numaram cate l valide au P[l] == P[r]
        ans += freq[P[r]];
    }

    cout << ans << '\n';
    return 0;
}