Cod sursa(job #3940)
| Utilizator | Data | 29 decembrie 2006 17:46:33 | |
|---|---|---|---|
| Problema | Divk | Scor | 20 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.69 kb |
#include <stdio.h>
#define INF "divk.in"
#define OUF "divk.out"
#define NMAX 500001
#define RMAX 131072
int main()
{
unsigned long t,a[NMAX],r[RMAX]={0},li,ls,n;
register unsigned long i,f,k;
unsigned long long nr=0;
FILE *in,*out;
in=fopen(INF,"r");
out=fopen(OUF,"w");
fscanf(in,"%ld%ld%ld%ld",&n,&k,&li,&ls);
a[0]=0;
for(i=1;i<=n;i++)
{
fscanf(in,"%ld",&f);
a[i]=(a[i-1]+f)%k;
}
//for(i=1;i<=n;i++) fprintf(out,"%ld ",a[i]);
//fprintf(out,"\n");
for(i=1;i<=n;i++)
{
nr+=r[a[i]];
if(i>=ls) r[a[i-ls+1]]--;
if(i-li+1<n) r[a[i-li+2]]++;
//for(t=0;t<8;t++) fprintf(out,"%ld ",r[t]);
//fprintf(out,"%lld\n",nr);
}
fprintf(out,"%lld",nr);
fclose(in);fclose(out);
}
