Pagini recente » Cod sursa (job #3156508) | Cod sursa (job #177367) | Cod sursa (job #9435) | Monitorul de evaluare | Cod sursa (job #50705)
Cod sursa(job #50705)
#include<stdio.h>
#define max 500001
long v[max];
long ss[max];
long sel[max/4];
int main()
{
freopen("divk.in","r",stdin);
freopen("divk.out","w",stdout);
long n,a,b,k,x,s=0,rest =0,i,w;
long long sol=0;
scanf("%ld%ld%ld%ld",&n,&k,&a,&b);
for(i=1;i<=n;i++) {scanf("%ld",&x);v[i]=x%k;}
for(i=1;i<=a-1;i++)
s+=v[i];
s%=k;
x =0;
for(i = a; i<=b;i++) {x+=v[i];x%=k;ss[i] =x; sel[x]++;}
for(i = a-1;i<=n-1;i++)
{
long sss = s -rest;
while(sss<0) sss+=k;
w = k - sss;
if(w==k) w=0;
sol +=sel[w];
sel[ss[i+1]]--;
if(i+b-a+2<=n)
{
x+=v[i+b-a+2];x%=k;
ss[i+b-a+2] = x;
sel[x]++;
}
rest+=v[i+1];rest%=k;
s+=v[i+1]; s-=v[i-a+2];if(s<0) s+=k;
}
printf("%lld\n",sol);
return 0;
}