Cod sursa(job #1749208)

Utilizator DevilOnFieldTudor Horia Niculescu DevilOnField Data 28 august 2016 02:18:00
Problema Divk Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<stdio.h>

FILE *in, *out;

int nrnr[100010], v[500005];

void printnrnr()
{
    int i;

    for(i = 0; i <= 10; i++) {
        printf("%d ", nrnr[i]);
    } printf("\n");
}

int main ()
{

    int n, a, b, k, i;
    long long s;

    in = fopen("divk.in", "r");
    out = fopen("divk.out", "w");

    fscanf(in, "%d%d%d%d", &n, &k, &a, &b);

    for(i = 1; i <= n; i++) {
        fscanf(in, "%d", &v[i]);
        v[i] = (v[i - 1] + v[i]) % k;
        //printf("%d ", v[i]);
    } //printf("\n");

    for(i = a; i <= n && i <= b; i++) {
        nrnr[v[i]]++;
    }
    s = 0;
    s = s + nrnr[v[0]];

    for(i = 1; i <= n - b; i++) {
        //printnrnr();
        nrnr[v[i + a - 1]]--;
        nrnr[v[i + b]]++;
        //printf("%d %d %d %d\n", i, i + a - 1, i + b, s);
        s = s + nrnr[v[i]];
    }
    for(i = n - b + 1; i <= n - a; i++) {
        //printnrnr();
        nrnr[v[i + a - 1]]--;
        //printf("%d %d %d\n", i, i + a - 1, s);
        s = s + nrnr[v[i]];
    }
    fprintf(out, "%lld", s);

    fclose(in);
    fclose(out);

    return 0;
}