Cod sursa(job #811284)

Utilizator alex_unixPetenchea Alexandru alex_unix Data 11 noiembrie 2012 20:16:37
Problema Divk Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb

#include <cstdio>

const int MAX_SIZE(500001);
const int MAX_K(100000);

int sum [MAX_SIZE];
int reminder [MAX_K];

int n, k, a, b;
long long subsequences;

inline void read (void)
{
	std::freopen("divk.in","r",stdin);
	std::scanf("%d%d%d%d",&n,&k,&a,&b);
	int number;
	for (int index(1) ; index <= n ; ++index)
	{
		std::scanf("%d",&number);
		sum[index] = (sum[index - 1] + number) % k;
	}
	std::fclose(stdin);
}

inline void dynamic (void)
{
	for (int index(a) ; index <= n ; ++index)
	{
		if (index > b)
			--reminder[sum[index - b - 1]];
		++reminder[sum[index - a]];
		subsequences += reminder[sum[index]];
	}
}

inline void print (void)
{
	std::freopen("divk.out","w",stdout);
	std::printf("%lld\n",subsequences);
	std::fclose(stdout);
}

int main (void)
{
	read();
	dynamic();
	print();
	return 0;
}