Pagini recente » Cod sursa (job #2471924) | Cod sursa (job #2072269) | Cod sursa (job #2283479) | Cod sursa (job #2010342) | Cod sursa (job #1570289)
#include <stdio.h>
#include <stdlib.h>
int v[500001],s[500001],lista[500001],next[500001],aux[500001];
int main()
{
int n,k,a,b,i,nr,ct,j;
freopen("divk.in","r",stdin);
freopen("divk.out","w",stdout);
scanf("%d%d%d%d",&n,&k,&a,&b);
for(i=1; i<=n; i++)
{
scanf("%d",&v[i]);
s[i]=(s[i-1]+v[i])%k;
}
for(i=0; i<k; i++)
aux[i]=lista[i]=-1;
aux[0]=-1;
for(i=0; i<=n; i++)
{
if(aux[s[i]]==-1)
{
lista[s[i]]=i;
aux[s[i]]=i;
next[i]=n+1;
}
else
{
next[aux[s[i]]]=i;
aux[s[i]]=i;
next[i]=n+1;
}
}
nr=0;
for(ct=0; ct<k; ct++)
{
if(lista[ct]>-1){
i=j=lista[ct];
while(next[j]!=n+1 && j-i<=b){
if(j-i>=a)
nr++;
j=next[j];
}
if(j-i>=a && j-i<=b)
nr++;
while(j!=n+1)
{
i=next[i];
while(j-i>=a)
{
if(j-i<=b)
nr++;
i=next[i];
}
j=next[j];
}
}
}
printf("%d\n",nr);
return 0;
}