Cod sursa(job #1548249)

Utilizator cristina_borzaCristina Borza cristina_borza Data 10 decembrie 2015 18:01:03
Problema Divk Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <cstdio>
#include <cstring>
#include <vector>

#define NMAX 500005

using namespace std;

long long nra[NMAX] , nrb[NMAX] , v[NMAX];
long long n , k , a , b , r , ra ,rb , sol , x;

int solve(int nr);

int main() {
    freopen("divk.in" , "r" , stdin);
    freopen("divk.out" , "w" , stdout);

    scanf("%lld %lld %lld %lld" , &n , &k , &a , &b);

    long long sum = 0;

    for(int i = 1 ; i <= n ; ++i) {
        scanf("%d" , &x);
        sum += x;
        v[i] = sum % k;
    }

    v[0] = 0;

    for(int i = 0 ; i <= n ; ++i) {
        r = v[i];

        if(i >= a) {
            ra = v[i - a];
            ++nra[ra];
        }

        sol += nra[r] - nrb[r];

        if(i >= b) {
            rb = v[i - b];
            ++nrb[rb];
        }
    }

    printf("%lld" , sol);

    return 0;
}