Cod sursa(job #1357511)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 23 februarie 2015 22:42:36
Problema Loto Scor 5
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I Marime 1.3 kb
#include <stdio.h>
#include <algorithm>
#define NMAX 107
FILE *fin, *fout;
int n, s, v[NMAX], pos = 0, poz, ans, v1[6];
struct ceva
{
	int val;
	int p1;
	int p2;
	int p3;
} arr[NMAX*NMAX*NMAX], temp;
bool comp(ceva a, ceva b)
{
	return (a.val < b.val);
}
bool cmp(ceva a, ceva b)
{
	return (a.val < b.val);
}
bool f;
int main()
{
	fin = freopen("loto.in", "r", stdin);
	fout = freopen("loto.out", "w", stdout);
	scanf("%d %d", &n, &s);
	for(int i = 0; i< n; i++) scanf("%d", &v[i]);
	for(int i = 0; i< n; i++)
	{
		for(int j = 0; j< n; j++)
		{
			for(int k = 0; k< n; k++)
			{
				arr[pos].val = v[i] + v[j] + v[k];
				arr[pos].p1 = i;
				arr[pos].p2 = j;
				arr[pos].p3 = k;
			}
		}
	}
	std::sort(arr, arr+n*n*n, comp);
	for(int i = 0; i< n; i++)
	{
		for(int j = 0; j< n; j++)
		{
			for(int k = 0; k< n; k++)
			{
				temp.val = s - v[i] - v[j] - v[k];
				poz = std::lower_bound(arr, arr+n*n*n, temp, cmp) - arr;
				if(arr[poz].val == temp.val)
				{
					v1[0] = v[i];
					v1[1] = v[j];
					v1[2] = v[k];
					v1[3] = v[arr[poz].p1];
					v1[4] = v[arr[poz].p2];
					v1[5] = v[arr[poz].p3];
					f = 1;
					break;
				}
			}
			if(f) break;
		}
		if(f) break;
	}
	std::sort(v1, v1+6);
	if(f) for(int i = 0; i< 6; i++) printf("%d ", v1[i]);
	else printf("-1");
	printf("\n");
	fclose(fin);
	fclose(fout);
	return 0;
}