Cod sursa(job #475805)

Utilizator blasterzMircea Dima blasterz Data 8 august 2010 16:45:52
Problema Divk Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <cstdio>
#include <cstring>


using namespace std;

#define dim 8192
char ax[dim];
int pz;

inline void cit (int &x)
{
	x = 0;
	while (ax[pz] < '0' || ax[pz] > '9')
		if (++pz == dim)
			fread (ax, 1, dim, stdin), pz = 0;
		
	while (ax[pz] >= '0' && ax[pz] <= '9')
	{
		x = x * 10 + ax[pz] - '0';
		if (++pz == dim)
			fread (ax, 1, dim, stdin), pz = 0;
	}
}

int a[500001];
int x[100001];
int s[500001];

int n, K, A, B;

int main ()
{
	freopen ("divk.in", "r", stdin);
	freopen ("divk.out", "w", stdout);
	
	cit (n); cit (K); cit (A); cit (B);
	
	int i;
	for (i = 1; i <= n; ++i)
		cit (a[i]);
		
	s[0] = 0;
	for (i = 1; i <= n; ++i)
		s[i] = (s[i - 1] + a[i]) % K;
	
	long long sol = 0;
	
	for (i = A; i <= n; ++i)
	{
		//printf ("(%d %d %d\n", i, i - A, i - B);
		++x[ s[i - A] ];
		
		if (i - B - 1 >=  0)
			--x[ s[i - B - 1] ];
		
		//printf ("%d : %d\n", i, x[ s[i] ]);
		sol += (long long)( x[ s[i] ]);
		
	}
	
	printf ("%lld\n", sol);
	
	
	return 0;
}