Cod sursa(job #496898)

Utilizator Addy.Adrian Draghici Addy. Data 31 octombrie 2010 10:30:37
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <cstdio>
#include <algorithm>

using namespace std;

#define NMAX 105

struct sum {
	int s, x, y, z;
} S[NMAX * NMAX * NMAX];

int V[NMAX], NS, n, i, j, k, x, y, z, v, p, u, mid;

int cmp (sum A, sum B) {
	return A.s < B.s;
}

int main () {
	
	freopen ("loto.in", "r", stdin);
	freopen ("loto.out", "w", stdout);
	
	scanf ("%d %d", &n, &v);
	
	for (i = 1; i <= n; i++)
		scanf ("%d", &V[i]);
	
	for (i = 1; i <= n; i++)
		for (j = i; j <= n; j++)
			for (k = j; k <= n; k++) {
				S[++NS].s = V[i] + V[j] + V[k];
				S[NS].x = V[i], S[NS].y = V[j],	S[NS].z = V[k];
			}
	
	sort (S + 1, S + NS + 1, cmp);
	
	for (i = 1; i <= NS; i++) {
		
		p = 1, u = NS;
		while (p <= u) {
			mid = (u - p) / 2 + p;
			if (S[mid].s == v - S[i].s) {
				x = S[mid].x, y = S[mid].y, z = S[mid].z;
				break;
			}
			else if (S[mid].s > v - S[i].s)
				u = mid - 1;
			else
				p = mid + 1;
		}
		
		if (x) break;
	}
	
	if (x)
		printf ("%d %d %d %d %d %d", S[i].x, S[i].y, S[i].z, x, y, z);
	else
		printf ("-1");
	
	return 0;
}