Cod sursa(job #741933)

Utilizator Cosmin1490Balan Radu Cosmin Cosmin1490 Data 27 aprilie 2012 16:16:51
Problema Divk Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <iostream>
#include <fstream>

using namespace std;

#define NMAX 500001

const char infile[] = "divk.in";
const char outfile[] = "divk.out";

int V[NMAX];
int S[NMAX];

struct ProblemInput
{
	int elementCount;
	int* elements;
	int* buf;
	int divisor;
	int minLength;
	int maxLength;
};

void readInput(ProblemInput& input, istream & fin)
{
	fin >> input.elementCount
		>> input.divisor
		>> input.minLength
		>> input.maxLength;

	for(int i = 0 ; i < input.elementCount; i++)
	{
		fin >> input.elements[i];
	}
}


void solve(ProblemInput& input, ostream& fout)
{
	int* sum = input.buf;

	sum[0] = 0;
	for(int i = 0; i < input.elementCount; i++)
	{
		sum[i + 1] = (sum[i] + input.elements[i]) % input.divisor;
	}

	int answer = 0;

	for(int i = input.minLength; i <= input.maxLength; i++)
	{
		for(int j = i; j <= input.elementCount; j++)
		{
			if((sum[j] - sum[j - i]) % input.divisor == 0)
			{
				answer ++;
			}
		}
	}

	fout << answer << "\n";
}

int main(int argc, char* argv[])
{

	ProblemInput input;
	input.elements = (int*) V;
	input.buf = (int*) S;
	fstream fin(infile, ios::in);
	readInput(input, fin);
	fin.close();

	fstream fout(outfile, ios::out);
	solve(input, fout);
	fout.close();
}