Cod sursa(job #1887590)

Utilizator adystar00Bunea Andrei adystar00 Data 21 februarie 2017 17:56:14
Problema Divk Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <stdio.h>
#define dim 10000
using namespace std;
int v[500010],vc[100010],poz;
char buff[dim];
void citeste (int &numar)
{
    numar = 0;
    while(buff[poz]<'0'||buff[poz]>'9')
    {
        poz++;
        if(poz==dim){
            fread(buff,1,dim,stdin);
            poz=0;
        }
    }
    while(buff[poz]>='0'&&buff[poz]<='9')
    {
        numar=numar*10+buff[poz]-'0';
        poz++;
        if(poz==dim){
            fread(buff,1,dim,stdin);
            poz=0;
        }
    }
}
int main()
{
    freopen("divk.in","r",stdin);
    freopen("divk.out","w",stdout);
    int n,k,a,b,i,x;
    long long suma=0;
    citeste(n);
    citeste(k);
    citeste(a);
    citeste(b);
    for(i=1; i<=n; i++)
    {
        citeste(x);
        v[i]=v[i-1]+x;
        v[i]%=k;
    }
    vc[0]=1;
    for(i=1; i<=n; i++)
    {
        if(i>=a)
        {
            suma=suma+vc[v[i]];
            vc[v[i-a+1]]++;
            if(i>=b)
                vc[v[i-b]]--;

        }
    }
    printf("%lld",suma);
    return 0;
}