Cod sursa(job #1106456)

Utilizator s1mpMihai Alexandru s1mp Data 12 februarie 2014 20:32:09
Problema Divk Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<iostream>
#include<fstream>

#define Nmax 500002

using namespace std;

long X[Nmax];
long N;
long K, A, B;
long Y[Nmax];

long initializare() {
	long s = 0;
	long nr = 0;
	for ( int i = 1; i <= A ; i++ ) {
		s += X[i];
	}
	Y[A] = s;
	if (Y[A] % K == 0) {
		nr ++;
	}
	for ( int i = A + 1; i <= N; i++) {
		Y[i] = Y[i - 1] + X[i] - X[i - A];
		if ( Y[i] % K == 0 ) {
			nr ++;
		}
	}
	return nr;
}

long numarDivizori() {
	long nr;
	nr = initializare();
	for ( int i = A + 1; i <= B; i++ ) {
		Y[i] = Y[i - 1] + X[i];
		if ( Y[i] % K == 0 ) {
			nr ++;
		}
		for ( int  j = i + 1; j <= N; j++ ) {
			Y[j] = Y[j-1] + X[j] - X[j - i];
			if ( Y[j] % K == 0 ) {
				nr ++;
			}
		}
	}
	return nr;
}

int main() {
	ifstream f("divk.in");
	ofstream g("divk.out");
	f >> N;
	f >> K;
	f >> A;
	f >> B;
	for ( int i = 1; i <= N; i++ ) {
		f >> X[i];
	}
	g << numarDivizori();
	f.close();
	g.close();
	return 0;
}