Cod sursa(job #131191)

Utilizator raduzerRadu Zernoveanu raduzer Data 3 februarie 2008 13:04:05
Problema Divk Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include <stdio.h>
#include <vector>

using namespace std;

int n,k,x,y,b[500010],c[100010],d[100010];
long long sol;
vector <int> a[100010];

int main()
{
	freopen("divk.in","r",stdin);
	freopen("divk.out","w",stdout);
	scanf("%d%d%d%d",&n,&k,&x,&y);
	int i;
	for (i=0; i<k; ++i)
	{
		c[i]=0;
		d[i]=-1;
	}
	a[0].push_back(0);
	for (i=1; i<=n; ++i)
	{
		scanf("%d",&b[i]);
		b[i]=(b[i]+b[i-1])%k;
		a[b[i]].push_back(i);
		while (a[b[i]][d[b[i]]+1]<=i-x) d[b[i]]++;
		while (i-a[b[i]][c[b[i]]]>y) c[b[i]]++;
		if (c[b[i]]<=d[b[i]])
		{
			sol+=(d[b[i]]-c[b[i]]+1);
		}
	}
	printf("%d\n",sol);
	return 0;
}