Cod sursa(job #14785)

Utilizator megabyteBarsan Paul megabyte Data 9 februarie 2007 20:10:33
Problema Divk Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <stdio.h>
#define INF "divk.in"
#define OUF "divk.out"
#define NMAX 500001
#define RMAX 131072
long a[NMAX],r[NMAX]={0},li,ls,n;
int main()
{
	register  long i,f,k;
	unsigned long long nr=0,ps=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<=ls;i++)
	{
	  fscanf(in,"%ld",&f);
	  ps+=f%k;
	  if(ps%k==0&&i>=li) nr++; 
	  a[i]=(a[i-1]+f)%k;
	}
	for(i=ls+1;i<=n;i++)
	{
		fscanf(in,"%ld",&f);
		a[i]=(a[i-1]+f)%k;
	}
	for(i=1;i<=n;i++)
	{
		if(i>li) r[a[i-li]]+=1;
		if(i>ls+1) r[a[i-ls-1]]-=1;
                nr+=r[a[i]];
	}
	fprintf(out,"%lld",nr);
	fclose(in);fclose(out);
}