Cod sursa(job #1576006)

Utilizator emanuel_rRamneantu Emanuel emanuel_r Data 21 ianuarie 2016 23:36:56
Problema Divk Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<fstream>
#include<cstdio>
#include<algorithm>
#include<iostream>

using namespace std;

ofstream g("divk.out");

int R[100005], V[500005], S[500005];
char Buffer[20000000];
int n, k, pos, a, b;
long long sol;

void citeste(int & nr)
{
    nr = 0;
    while(Buffer[pos] < '0' || Buffer[pos] > '9')
        pos++;
    while(Buffer[pos] >= '0' && Buffer[pos] <= '9')
        nr = nr*10 + Buffer[pos++] - '0';
}

void citire()
{
    freopen("divk.in", "r", stdin);
    fread(Buffer, 1, 20000000, stdin);

    int i;
    citeste(n);citeste(k);citeste(a);citeste(b);
    for(i=1; i<=n; i++){
        citeste(V[i]);
    }
}

void dinam()
{
    for(int i=1; i<=n; i++){
        S[i] = (S[i-1] + V[i]) % k;
        if(i >= a)
            R[S[i-a]]++;
        if(i > b)
            R[S[i-b-1]]--;

        sol += R[S[i]];
    }
    g<<sol<<"\n";
}

int main()
{
    citire();
    dinam();
    return 0;
}