Cod sursa(job #181801)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 18 aprilie 2008 23:30:35
Problema Divk Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <stdio.h>
#include <vector>

using namespace std;

vector <int>v[100000];
long n,k,a,b,i,j,x,p,q,l,sol;
long long s;

int main(){
    freopen("divk.in","r",stdin);
    freopen("divk.out","w",stdout);
    
    scanf("%ld %ld %ld %ld",&n,&k,&a,&b);
    v[0].push_back(0);
    for (i=1;i<=n;++i){
        scanf("%ld\n",&x);
        s=(long long)s+x;
        v[(s%k)].push_back(i);
    }
    for (i=0;i<k;++i){
        p=0;q=0;
        l=v[i].size();
        for (j=0;j<l;j++){
            while (v[i][j]-v[i][p+1]>=a){++p;if (p==l-1)break;}
            while (v[i][j]-v[i][q]>b&&q<l-1)++q;
            if (v[i][j]-v[i][p]>=a)
               if (v[i][j]-v[i][q]<=b)
                  if (p-q+1>0)sol+=p-q+1;
        }
    }
    printf("%ld\n",sol);
return 0;
}