Cod sursa(job #249238)
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
struct bil {
int val, n1, n2;
bool operator<(const bil &b) const {
return val < b.val;
}
};
bil x[1 << 20];
int a[128], n, s, nx, g = -1, dm;
void citire(void) {
freopen("loto.in", "r", stdin);
int i;
scanf("%d%d", &n, &s);
for (i = 1; i <= n; ++i)
scanf("%d", a+i);
fclose(stdin);
}
void sumdo(void) {
int i, j, k;
for (i = 1; i <= n; ++i)
for (j = 1; j <= n; ++j)
for (k = 1; k <= n; ++k) {
x[++nx].val = a[i] + a[j] + a[k];
x[nx].n1 = a[i];
x[nx].n2 = a[j];
}
}
void seek(void) {
int i, o, p, j, t;
for (i = 1; i <= nx; ++i){
o = s - x[i].val;
for (p = 1; p < nx; p <<= 1) ;
for (j = 1; p; p >>= 1)
if ((t = j + p) <= nx && x[t].val <= o)
j = t;
if (x[j].val == o) {
printf("%d %d %d %d %d %d\n",
x[i].n1, x[i].n2, x[i].val-x[i].n1-x[i].n2,
x[j].n1, x[j].n2, x[j].val-x[j].n1-x[j].n2);
return;
}
}
printf("-1\n");
}
int main(void) {
citire();
sumdo();
std:sort(x+1, x+nx);
freopen("loto.out","w",stdout);
seek();
fclose(stdout);
return 0;
}