Cod sursa(job #807875)

Utilizator gener.omerGener Omer gener.omer Data 5 noiembrie 2012 20:46:02
Problema Divk Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <iostream>
#include <fstream>

using namespace std;

#define NMAX 500005

int N, K, A, B, X[NMAX];
long long sum[NMAX];


void precompute()
{
	sum[0] = 0;
	sum[1] = X[1];
	for(int i = 1; i <= N; ++i)
		sum[i] = sum[i-1] + X[i];
}

long long solve()
{
	long long nr = 0;
	
	for(int i = 1; i <= N - A + 1; ++i)
	{
		for(int j = i + A - 1; (j <= i + B - 1) && (j <= N); ++j)
		{
			long long s = sum[j] - sum[i-1];
			if(s % K == 0)
			{
				//cout << i << " " << j << endl;
				++nr;
			}
		}
	}
	
	return nr;
}

int main()
{
	freopen("divk.in", "rt", stdin);
	freopen("divk.out", "wt", stdout);
	
	scanf("%d %d %d %d", &N, &K, &A, &B);
	for(int i = 1; i <= N; ++i)
		scanf("%d", &X[i]);
	precompute();
	printf("%lld", solve());
	return 0;
}