Cod sursa(job #1059856)

Utilizator TripluYOlteanu Costin TripluY Data 17 decembrie 2013 04:49:05
Problema Divk Scor 90
Compilator c Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *intrare = fopen("divk.in", "r");
    int N, K, A, B, *rest, *frecventa, i, numar_curent, solutie = 0;
    fscanf(intrare, "%d %d %d %d", &N, &K, &A, &B);
    rest = calloc(N + 1, sizeof(int));
    frecventa = calloc(N + 1, sizeof(int));

    for(i = 1;i <= N; ++i)
    {
        fscanf(intrare, "%d", &numar_curent);
        rest[i] = (rest[i - 1] + numar_curent) % K;
        if(i >= A)
            ++frecventa[rest[i-A]];//poate sa inceapa acolo
        if(i > B)
            --frecventa[rest[i - B - 1]];//nu poate
        solutie += frecventa[rest[i]];
    }

    fclose(intrare);
    FILE *iesire = fopen("divk.out", "w");
    fprintf(iesire, "%d", solutie);
    fclose(iesire);
    exit(0);
}