Cod sursa(job #1450773)

Utilizator EpictetStamatin Cristian Epictet Data 14 iunie 2015 17:33:42
Problema Divk Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.59 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin ("divk.in");
ofstream fout ("divk.out");
int N, K, A, B, sol, V[500010];
vector < int > X[100010];


int main()
{
	fin >> N >> K >> A >> B;
	X[0].push_back(0);
	for (int i = 1; i <= N; i++) {
		fin >> V[i];
		V[i] = (V[i] + V[i - 1]) % K;
		X[V[i]].push_back(i);
	}
	for (int i = 0; i < K; i++)
	{
		int p = 0, u = 1;
		for (; u < X[i].size(); u++)
		{
			while (X[i][u] - X[i][p] > B) p++;
			if (X[i][u] - X[i][p] >= A && X[i][u] - X[i][p] <= B)
			{
				sol += (u - p);
			}
		}
	}
	
	fout << sol << '\n';
	fout.close();
	return 0;
}