Cod sursa(job #1308243)

Utilizator andrei.arnautuAndi Arnautu andrei.arnautu Data 3 ianuarie 2015 19:58:20
Problema Divk Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <cstdio>
#define MaxN 500013
#define MaxK 100013

using namespace std;

FILE *fin=freopen("divk.in","r",stdin);
FILE *fout=freopen("divk.out","w",stdout);

int Sum[MaxN], F[MaxK];
int n, k, a, b, cnt;


void Read()
{
    scanf("%d%d%d%d", &n, &k, &a, &b);

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

void Solve_Dynamic()
{
    for(int i = 1 ; i <= n ; ++i )
    {
        if( i >= a )
            ++F[Sum[i - a] % k];
        if( i > b )
            --F[Sum[i - b - 1] % k];
        cnt += F[Sum[i] % k];
    }
    printf("%d", cnt);
}

int main()
{
    Read();
    Solve_Dynamic();
}