Cod sursa(job #260637)

Utilizator DranaXumAlexandru Dumitru Paunoiu DranaXum Data 17 februarie 2009 12:55:13
Problema Divk Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<stdio.h>

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

long long m[2][500001],n,k,a,b,t;
long long 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]%k+x[i]%k;

    if(i>=a)
        m[1][i]-=x[i-a]%k;
        m[1][i]%=k;
		if(m[1][i]%k==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]=0;
			m[crnt][j]=(m[prev][j]%k+x[j-i+1]%k)%k;
			if(m[crnt][j]==0)
			t++;
    }
  }
}

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

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