Cod sursa(job #1199624)

Utilizator sorin2kSorin Nutu sorin2k Data 19 iunie 2014 23:59:51
Problema Oite Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<fstream>
#include<unordered_map>
#include<utility>
#include<vector>
#include<iostream>
using namespace std;

unordered_map<int, vector<int> > h; 
int oite[1024];

ifstream fin("oite.in");
ofstream fout("oite.out");

int main() {
	int n, l, i, j, sol = 0;
	vector<int> v;
	cin >> n >> l;
	for(i = 0; i < n; i++) {
		cin >> oite[i];
	}
	// insereaza in hash toate perechile de numere; cheia = suma lor
	for(i = 0; i < n; i++) {
		for(j = i + 1; j < n; j++) {
			if(h.find(oite[i] + oite[j]) == h.end()) {
				v.clear();
				v.push_back(i);
				h.insert(make_pair(oite[i] + oite[j], v));
			} else {
				h[oite[i] + oite[j]].push_back(i);
			}
		}
	}
	// pt fiecare pereche de numere, cauta in hash l - suma lor si verifica
	// daca numerele sunt diferite
	for(i = 0; i < n; i++) {
		for(j = i + 1; j < n; j++) {
			if(h.find(l-oite[i]-oite[j]) != h.end()) {
				for(vector<int>::iterator p = h[l-oite[i]-oite[j]].begin(); p != h[l-oite[i]-oite[j]].end(); ++p) {
					if(i < *p) {
						sol++;
					}
				}
			}
		}
	}
	cout << sol / 6 << "\n";
	return 0;
}