Cod sursa(job #175846)

Utilizator scvalexAlexandru Scvortov scvalex Data 10 aprilie 2008 14:47:16
Problema Divk Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int N, K,
	A, B;
vector<int> lista[100001];

int main(int argc, char *argv[]) {
	FILE *fi = fopen("divk.in", "r");
	fscanf(fi, "%d %d %d %d", &N, &K, &A, &B);
	lista[0].push_back(0);
	int last(0), cur;
	for (int i(1); i <= N; ++i) {
		fscanf(fi, "%d", &cur);
		lista[(cur + last) % K].push_back(i);
		last = (cur + last) % K;
	}
	fclose(fi);

	/*for (int i(0); i <= N; ++i)
		cout << S[i] << " ";
	cout << endl;

	for (int i(0); i < K; ++i)
		if (lista[i].size() > 0) {
			cout << i << ": ";
			for (int j(0); j < (int)lista[i].size(); ++j)
				cout << lista[i][j] << " ";
			cout << endl;
		}*/

	int S(0);
	for (int i(0); i < K; ++i)
		if (lista[i].size() > 1) {
			int lastst = 0;
			for (int j(1); j < (int)lista[i].size(); ++j) {
				bool vah(false);
				for (int k = lastst; k < j; ++k) {
					if ((A <= lista[i][j] - lista[i][k]) && (lista[i][j] - lista[i][k] <= B)) {
						if (!vah) {
							lastst = k;
							vah = true;
						}
						++S;
						//cout << lista[i][k] << " " << lista[i][j] << endl;
					}
				}
			}
		}

	FILE *fo = fopen("divk.out", "w");
	fprintf(fo, "%d\n", S);
	fclose(fo);

	return 0;
}