Cod sursa(job #1506762)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 20 octombrie 2015 22:59:34
Problema Divk Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<stdio.h>
#define dim 10000
using namespace std;
int s[500010],vc[100010],poz=0;
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,x,i;
    long long sol=0;
    fread(buff,1,dim,stdin);
    citeste(n);
    citeste(k);
    citeste(a);
    citeste(b);
    vc[0]=1;
    for(i=1;i<=n;i++){
        citeste(x);
        s[i]=(s[i-1]+x)%k;
        if(i>=a){
            sol+=vc[s[i]];
            vc[s[i-a+1]]++;
            if(i>=b)
                vc[s[i-b]]--;
        }
    }
    printf("%lld",sol);
    return 0;
}