Cod sursa(job #127451)

Utilizator alex_mircescuAlex Mircescu alex_mircescu Data 23 ianuarie 2008 22:29:45
Problema Loto Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <stdio.h>
#include <stdlib.h>

#define maxn 101


long sol[maxn * maxn * maxn];
long v[maxn];
long n, s;

int cmp(const void *a,const void *b)
{
	return *(long *) a- *(long *)b;
}

void afisare(long a) {
	long i, j, l;
	for( i = 1;i <= n; ++i) {
		for(j = 1;j <= n; ++j) {
			for(l = 1;l <= n; ++l) {
				if(v[i] + v[j] + v[l] == sol[a]) {
					printf("%ld %ld %ld",v[i],v[j],v[l]);
					return ;
				}
			}
		}
	}
}

int main()
{
	
	freopen("loto.in","r",stdin);
	freopen("loto.out","w",stdout);
	
	long i, j, l, t;
	
	scanf("%ld %ld", &n, &s);
	for(i = 1;i <= n; ++i)
		scanf("%ld", &v[i]);
	long nr = 0;

	for(i = 1;i <= n; ++i) {
		for(j = 1; j <= n; ++j) {
			for(l = 1;l <= n; ++l) {
				sol[nr++]=v[i] + v[j] + v[l];
			}
		}
	}
	qsort(sol, nr ,sizeof(sol[0]), cmp);
	t = nr - 1;
	for(i = 0;i < nr && t >= 0; ++i) {
		while(sol[i] + sol[t] > s && t >= 0) {
			t--;
		}
		if (t < 0) {
			break;
		}
		if (sol[i] + sol[t] == s) {
			afisare(i);
			printf(" ");
			afisare(t);
			printf("\n");
			return 0;
		}
	}
	printf("-1\n");
	return 0;
}