Cod sursa(job #249238)

Utilizator ProstuStefan-Alexandru Filip Prostu Data 27 ianuarie 2009 21:38:24
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#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;
}