Cod sursa(job #181798)

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

using namespace std;

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


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+=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;
}