Pagini recente » Cod sursa (job #2687170) | Cod sursa (job #200180) | Cod sursa (job #2584770) | Cod sursa (job #813345) | Cod sursa (job #2519868)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");
struct trei {
int x, y, z, sum;
};
int v[128], n, s;
bool found;
trei sums[1000001];
int cnt;
bool cmp(trei a, trei b) {
return a.sum < b.sum;
}
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].sum == x)
return m;
else if(sums[m].sum > x)
dr = m-1;
else
st = m+1;
}
return -1;
}
void solve() {
for(int i = 1; i<= n; i++)
for(int j = 1; j <= n; j++)
for(int k = 1; k <= n; k++) {
cnt++;
sums[cnt] = {v[i], v[j], v[k], v[i]+v[j]+v[k]};
}
sort(sums+1, sums+cnt+1, cmp);
//int a = 0, b = l-1;
// while(a <= b) {
// if(sums[a].sum+sums[b].sum == s) {
// found = true;
// fout << sums[a].x << ' ' << sums[a].y << ' ' << sums[a].z << ' ' << sums[b].x << ' ' << sums[b].y << ' ' << sums[b].z;
// return;
// } else if(sums[a].sum + sums[b].sum < s)
// a++;
// else
// b--;
// }
for(int a = 0; a < cnt; a++) {
int poz = cb(1, cnt, s-sums[a].sum);
if(poz != -1) {
found = true;
fout << sums[a].x << ' ' << sums[a].y << ' ' << sums[a].z << ' ' << sums[poz].x << ' ' << sums[poz].y << ' ' << sums[poz].z;
return;
}
}
}
int main() {
citire();
solve();
if (!found) fout << -1;
}