Cod sursa(job #175836)

Utilizator scvalexAlexandru Scvortov scvalex Data 10 aprilie 2008 14:40:51
Problema Divk Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int N, K,
	A, B;
int S[100001];
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);
	for (int i(1); i <= N; ++i) {
		fscanf(fi, "%d", S + i);
		S[i] = (S[i - 1] + S[i]) % K;
		lista[S[i]].push_back(i);
	}
	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;
					}
				}
			}
		}

	ofstream fout("divk.out");
	fout << S << endl;
	fout.close();

	return 0;
}