Cod sursa(job #2345193)

Utilizator SqueekDanielTodasca Daniel SqueekDaniel Data 15 februarie 2019 22:49:20
Problema Divk Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <bits/stdc++.h>

#define MAXK 100005

int N, K, A, B;
int Rest[MAXK];
std::queue <int> Queue1, Queue2;

std::ifstream In ("divk.in");
std::ofstream Out("divk.out");

void Citire() {
    In >> N >> K >> A >> B;
}

void Rezolvare() {
    int Sum = 0, Ans = 0;

    Queue1.push(0), Queue2.push(0);
    for (int i=1, X; i<A-1; ++i)
        In >> X, Sum += X, Sum %= K,
        Queue1.push(Sum), Queue2.push(Sum);

    for (int i=A-1, X; i<B; ++i)
        In >> X, Sum += X, Sum %= K,
        Queue1.push(Sum), Queue2.push(Sum),
        Rest[Queue1.front()]++, Queue1.pop(),
        Ans += Rest[Sum];

    for (int i=B, X; i<=N; ++i)
        In >> X, Sum += X, Sum %= K,
        Queue1.push(Sum), Queue2.push(Sum),
        Rest[Queue1.front()]++, Queue1.pop(),
        Rest[Queue2.front()]--, Queue2.pop(),
        Ans += Rest[Sum];
    Out << Ans << '\n';
}

int main()
{
    Citire();
    Rezolvare();

    return 0;
}