Cod sursa(job #29327)

Utilizator pocaituDavid si Goliat pocaitu Data 9 martie 2007 00:24:15
Problema Divk Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<stdio.h>
#define nmax 1000
int long sol, p[nmax][nmax],v[nmax],n,k,a,b;

void citire();
void afisare();
void rest();
void rezolva();

int main()
{citire();
 rest();
 rezolva();
 afisare();
 return 0;
 }

void afisare()
{freopen("divk.out","w",stdout);
 printf("%ld",sol);
 fclose(stdout);
 }

void citire()
{int long a,i;
 freopen("divk.in","r",stdin);
 scanf("%ld%ld%ld%ld",&n,&k,&a,&b);
 for(i=1;i<=n;i++)
  {scanf("%ld",&a);
   v[i]=a+v[i-1];
   }


 }

void rest()
{int long i;
 for(i=1;i<=n;i++)
  p[v[i]%k][++p[v[i]%k][0]]=i;
 }

void rezolva()
{int long i,nr=0,j,ls,lj;

 for(i=0;i<k;i++)
   {j=2;
	while(j<=p[i][0]&&p[i][j]-p[i][1]<a) j++;

	for(j,lj=ls=1;j<=p[i][0];j++)
	 {while(p[i][j]-ls>b) ls++;
	  while(p[i][j]-lj<a) lj++;
	  nr+=ls-lj+1;
	  }
	}
 sol=nr;
 }