Pagini recente » Cod sursa (job #82269) | Cod sursa (job #1422027) | Cod sursa (job #2994523) | Cod sursa (job #111322) | Cod sursa (job #1199624)
#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;
}