Cod sursa(job #498609)

Utilizator dcm9000Dinu Cristian Mircea - UPB dcm9000 Data 5 noiembrie 2010 17:05:49
Problema Divk Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <iostream>
#include <fstream>
#include <cstdio>

using namespace std;

int N,K,A,B;
int V[500000];
int C[100000];

int main()
{
	FILE* fisIn = fopen("divk.in", "r");
	ofstream fisOut("divk.out");
	
	fscanf(fisIn, "%d %d %d %d", &N, &K, &A, &B);
	for (int i=0; i<N; i++) fscanf(fisIn, "%d", V+i);
	
	V[0] = V[0] % K;
	for (int i=1; i<N; i++) V[i] = (V[i]+V[i-1])%K;
		
	memset(C, 0, sizeof(int)*K);
	C[0] = 1;
	
	int secv = 0;
	int pozA=-1;
	int pozB=-1;
	int pozR = A-1;
	while (pozR<N)
	{
		 secv += C[V[pozR]];
		 
		 pozR++;
		 pozA++;
		 C[pozA]++;
		 if ((pozR-pozB)>B)
		 {
			C[(pozB >= 0) ? V[pozB] : 0]--;
			pozB++;
		 }
	}
	
	fisOut << secv;
}