Cod sursa(job #372945)

Utilizator FlorianFlorian Marcu Florian Data 12 decembrie 2009 11:37:50
Problema Divk Scor 100
Compilator cpp Status done
Runda Problemiada - Editia #6 Marime 0.75 kb
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
#define MAX_N 500002
int S[MAX_N];
int N,K,a,b;
vector<int>A[MAX_N];
ifstream f("divk.in");
ofstream g("divk.out");
long long unsigned q(int x, int i, int j)
{
	int p = (int)(lower_bound(A[x].begin(), A[x].end(), i) - A[x].begin());
	int k = (int)(upper_bound(A[x].begin(), A[x].end(), j) - A[x].begin()) - 1;
	if(p > k) return 0;
	return (long long unsigned)(k - p +1);
}
int main()
{
	f>>N>>K>>a>>b;
	int i,x,p;
	long long unsigned sol = 0;
	for(i = 1; i <= N; ++i)
	{
		f>>x;
		S[i] = (S[i-1] + x)%K;
		A[S[i]].push_back(i);
	}
	for(i = 1; i + a - 1 <= N; ++i)
	{
		p = min(N, i + b -1);
		sol += q(S[i-1], i + a - 1, p);
	}
	g<<sol<<"\n";
	return 0;
}