Pagini recente » Cod sursa (job #1717995) | Cod sursa (job #2536312) | Cod sursa (job #2865490) | Cod sursa (job #597358) | Cod sursa (job #741979)
Cod sursa(job #741979)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
#define NMAX 500001
const char infile[] = "divk.in";
const char outfile[] = "divk.out";
struct ProblemInput
{
int elementCount;
int* available;
int* elements;
int divisor;
int minLength;
int maxLength;
ProblemInput()
{
elements = NULL;
available = NULL;
}
~ProblemInput()
{
if(available != NULL)
{
delete available;
}
if(elements != NULL)
delete elements;
}
};
void readInput(ProblemInput& input, istream & fin)
{
fin >> input.elementCount
>> input.divisor
>> input.minLength
>> input.maxLength;
input.available = new int[input.divisor];
input.elements = new int[input.elementCount + 2];
memset(input.available, 0, sizeof(int) * input.divisor);
int currentNumber = 0;
int currentSum = 0;
input.elements[0] = currentSum;
for(int i = 1 ; i <= input.elementCount; i++)
{
fin >> currentNumber;
currentSum += currentNumber;
currentSum %= input.divisor;
input.elements[i] = currentSum;
}
}
void solve(ProblemInput& input, ostream& fout)
{
int* sum = input.elements;
int* available = input.available;
int answer = 0;
for(int i = input.minLength; i <= input.elementCount; i++)
{
available[sum[i - input.minLength]] ++;
if(i > input.maxLength)
{
available[sum[i - input.maxLength - 1]]--;
}
answer += available[sum[i]];
}
fout << answer << "\n";
}
int main(int argc, char* argv[])
{
ProblemInput input;
fstream fin(infile, ios::in);
readInput(input, fin);
fin.close();
fstream fout(outfile, ios::out);
solve(input, fout);
fout.close();
}