Cod sursa(job #333126)
| Utilizator | Data | 21 iulie 2009 15:49:29 | |
|---|---|---|---|
| Problema | Divk | Scor | 40 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.57 kb |
#include <stdio.h>
FILE *in, *out;
long long int n,k,a,b,i,rez,s[500005],v[500005];
int main()
{
in=fopen("divk.in","r");
out=fopen("divk.out","w");
fscanf(in,"%lld %lld %lld %lld\n",&n,&k,&a,&b);
for(i=1;i<=n;i++)
{
fscanf(in,"%lld\n",&s[i]);
s[i]+=s[i-1];
}
for(i=0;i<=b-a;i++)
{
v[s[i]%k]++;
rez+=v[s[i+a]%k];
}
v[0]--;
if(v[0]<0)
v[0]=0;
for(i=b-a+1;i<=n-a;i++)
{
v[s[i-(b-a)]%k]--;
v[s[i]%k]++;
rez+=v[s[i+a]%k];
}
fprintf(out,"%lld",rez);
fclose(out);
return 0;
}