Cod sursa(job #960956)

Utilizator tudorv96Tudor Varan tudorv96 Data 11 iunie 2013 13:47:16
Problema Oite Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <fstream>
#include <vector>
using namespace std;

#define in "oite.in"
#define out "oite.out"
#define MOD 666013
#define N 1030

typedef vector <int> :: iterator IT;

vector <int> HASH[MOD];
int v[N],n, L, sol;

int h(int x) {
	while (x >= MOD)
		x -= MOD;
	return x;
}

int search(int x) {
	int ans = 0, k = h(x);
	for (IT it = HASH[k].begin(); it != HASH[k].end(); ++it)
		if (*it == x)
			ans++;
	return ans;
}	

int main() {
	ifstream fin (in);
	fin >> n >> L;
	for (int i = 0; i < n; ++i)
		fin >> v[i];
	fin.close();
	for (int i = 0; i < n - 1; ++i) {
		for (int j = i + 1; j < n; ++j)
			if (L - v[j] - v[i] >= 0)
				sol += search (L - v[j] - v[i]);
		for (int j = 0; j < i; ++j)
			HASH[h(v[j] + v[i])].push_back (v[j] + v[i]);
	}
	ofstream fout (out);
	fout << sol;
	fout.close();
	return 0;
}