Cod sursa(job #337473)
#include<cstdio>
using namespace std;
const int K = (1<<17);
const int N = (1<<19);
int* v[K];
int n,k,a,b,nr[K];
void citire()
{
int i,x,s[N];
char sir[10],*p;
scanf("%d%d%d%d\n",&n,&k,&a,&b);
s[0]=0;
++nr[0];
for(i=1;i<=n;++i)
{
fgets(sir,10,stdin);
for(x=0,p=sir;*p && *p!='\n';++p)
x=x*10+*p-'0';
s[i]=(s[i-1]+x)%k;
++nr[s[i]];
}
for(i=0;i<k;++i)
{
v[i]=new int[1+nr[i]];
v[i][0]=0;
}
for(i=0;i<=n;++i)
v[s[i]][++v[s[i]][0]] = i;
}
void calcul()
{
long long rez=0;
int i,j,pa,pb;
for(i=0;i!=k;++i)
{
pa=pb=1;
n=v[i][0];
for(j=1;j!=n+1;++j)
{
while(pa!=n+1 && v[i][pa]-v[i][j]<a)
++pa;
while(pb!=n+1 && v[i][pb]-v[i][j]<=b)
++pb;
rez+=pb-pa;
}
}
printf("%lld\n",rez);
}
int main()
{
freopen("divk.in","r",stdin);
freopen("divk.out","w",stdout);
citire();
calcul();
return 0;
}