Cod sursa(job #1450799)

Utilizator EpictetStamatin Cristian Epictet Data 14 iunie 2015 18:57:55
Problema Divk Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin ("divk.in");
ofstream fout ("divk.out");
int N, K, a, b;
int *V, *S, *F;

void Read_Data()
{
	fin >> N >> K >> a >> b;
	
	V = new int[N + 1]();
	S = new int[N + 1]();
	F = new int[K + 1]();
	
	for (int i = 1; i <= N; i++) {
		fin >> V[i];
	}
}

void Write_Data(long long sol)
{
	fout << sol << '\n';
	fin.close();
	fout.close();
	
	delete []V;
	delete []S;
	delete []F;
}

void Solve()
{
	long long sol = 0;
	
	for (int i = 1; i <= N; i++) {
		S[i] = (S[i - 1] + V[i]) % K;
	}
	
	for (int i = 1; i <= b; i++)
	{
		if (i - a >= 0) F[S[i - a]] ++;
		sol += F[S[i]];
	}
	
	for (int i = b + 1; i <= N; i++)
	{
		F[S[i - a]] ++;
		F[S[i - b - 1] ++;
		
		sol += F[S[i]];
	}
	
	Write_Data(sol);
}


int main()
{
	Read_Data();
	Solve();
	return 0;
}