Cod sursa(job #687949)

Utilizator mika17Mihai Alex Ionescu mika17 Data 22 februarie 2012 21:26:17
Problema Divk Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.61 kb
#include <cstdio>
#include <vector>
using std::vector;
int main()
{
	freopen("divk.in","r",stdin);
	freopen("divk.out","w",stdout);

	int N,K,A,B;
	scanf("%d%d%d%d",&N,&K,&A,&B);

	int x;
	vector<int > sum(N + 1);
	sum[0] = 0;
	for(int i = 1; i <= N; ++i)
	{
		scanf("%d",&x);
		(sum[i] = sum[i - 1] + x) %= K;
	}

	vector<int> count(K,0); //nu am nevoie de hash deoarece cheile sunt maxim K: {0 ... K - 1}
	long long res = 0LL;
	for(int i = 1; i <= N; ++i)
	{
		if(i >= A) count[ sum[i - A] ] ++;
		res += count[sum[i]];

		if(i >= B) count[ sum[i - B] ] --;
	}
	printf("%lld",res);

	return 0;
}