Cod sursa(job #141713)

Utilizator DranaXumAlexandru Dumitru Paunoiu DranaXum Data 23 februarie 2008 17:21:15
Problema Divk Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include<stdio.h>

FILE *fin=freopen("divk.in","r",stdin);
FILE *fout=freopen("divk.out","w",stdout);

int m[2][500001],n,k,a,b,t;
int x[500001];

void citire()
{
	scanf("%d%d%d%d",&n,&k,&a,&b);
  int i;
  for(i=1;i<=n;i++)
  {

  	scanf("%d",&x[i]);

    m[1][i]=m[1][i-1]+x[i];

    if(i>=a)
    m[1][i]-=x[i-a];
		m[1][i]=m[1][i]%k;
		if(m[1][i]==0) t++;
	}
	fclose(fin);
}

void rezolva()
{
	int i,crnt,prev,j;
	crnt=1;
	for(i=a+1;i<=b;i++)
	{
		prev=crnt;
		crnt=!crnt;
		for(j=i;j<=n;j++)
		{
			m[crnt][j]=(m[prev][j]+x[j-i+1])%k;
			if(m[crnt][j]==0)
			t++;
    }
  }
}

void afiseaza()
{
	printf("%d",t);
  fclose(fout);
}

int main()
{
	citire();
  rezolva();
  afiseaza();
	return 0;
}