Cod sursa(job #2214834)

Utilizator IulianOleniucIulian Oleniuc IulianOleniuc Data 20 iunie 2018 11:22:33
Problema Divk Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include <fstream>

#define MDMAX 500010
#define DPMAX 100010

std::ifstream fin("divk.in");
std::ofstream fout("divk.out");

int n, k, a, b;
long long int sol;
int md[MDMAX], dp[DPMAX];

int main() {
    int val;

    fin >> n >> k >> a >> b;
    for (int i = 1; i <= n; i++) {
        fin >> val;
        md[i] = (md[i - 1] + val) % k;

        if (i < a)
            continue;

        int hi = i - a;
        int lo = i - b > 0 ? i - b : 0;

        if (lo > 0)
            dp[md[lo - 1]]--;

        dp[md[hi]]++;
        sol += dp[md[i]];
    }

    fout << sol << '\n';
    fout.close();
    return 0;
}