Pagini recente » Cod sursa (job #2407689) | Cod sursa (job #450993) | Cod sursa (job #2187709) | Cod sursa (job #1715808) | Cod sursa (job #2519862)
#include <fstream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");
struct trei {
int x, y, z;
};
int v[128], n, s;
bool found;
vector <int> sums;
void citire() {
fin >> n >> s;
for(int i = 1; i <= n; i++)
fin >> v[i];
}
/*int cb(int st, int dr, int x) {
while(dr >= st) {
int m = (st+dr)/2;
if(sums[m] == x)
return m;
else if(sums[m] > x)
dr = m-1;
else
st = m+1;
}
return -1;
}*/
void solve() {
unordered_map<int, trei> m;
for(int i = 1; i<= n; i++)
for(int j = 1; j <= n; j++)
for(int k = 1; k <= n; k++)
if(m.find(v[i] + v[j] + v[k]) == m.end()) {
m[v[i]+v[j]+v[k]] = {v[i], v[j], v[k]};
sums.push_back(v[i]+v[j]+v[k]);
}
int l = sums.size();
sort(sums.begin(), sums.end());
int a = 0, b = l-1;
while(a <= b) {
if(sums[a]+sums[b] == s) {
found = true;
fout << m[sums[a]].x << ' ' << m[sums[a]].y << ' ' << m[sums[a]].z << ' ' << m[sums[b]].x << ' ' << m[sums[b]].y << ' ' << m[sums[b]].z;
return;
} else if(sums[a] + sums[b] < s)
a++;
else
b--;
}
//for(int a = 0; a < l; a++) {
// int poz = cb(0, l, s-sums[a]);
// if(poz != -1) {
// found = true;
// fout << m[sums[a]].x << ' ' << m[sums[a]].y << ' ' << m[sums[a]].z << ' ' << m[sums[poz]].x << ' ' << m[sums[poz]].y << ' ' << m[sums[poz]].z;
// return;
// }
//}
}
int main() {
citire();
solve();
if (!found) fout << -1;
}