Cod sursa(job #316162)

Utilizator blasterzMircea Dima blasterz Data 18 mai 2009 17:40:29
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#define maxh 666013
#define pb push_back

using namespace std;


vector<int> H[maxh];
int a[101], n, S;

typedef vector<int>::iterator vit;


inline int find(int v)
{
	int h=v%maxh;
	for(vit i=H[h].begin(); i != H[h].end(); ++i)
		if(*i == v) return 1;
	
	return 0;
}

inline void insert(int v)
{
	int h=v%maxh;
	if(find(v)) return ;
	H[h].pb(v);
}

void afis(int x, int y, int z)
{
	int i, j, k, s= S - a[x] - a[y] - a[z];
	for(i=1; i <= n; ++i)
		for(j=1; j <= n; ++j)
			for(k=1; k <= n; ++k)
				if(a[i] + a[j] + a[k] == s)
				{
					printf("%d %d %d %d %d %d\n", a[x], a[y], a[z], a[i], a[j], a[k]);
					return;
				}
}

int main()
{
	int i,j,k;
	freopen("loto.in","r",stdin);
	freopen("loto.out","w",stdout);
	scanf("%d %d\n", &n, &S);
	
	for(i=1; i <= n; ++i)  scanf("%d ", a+i);
	
	for(i=1; i <= n; ++i)
		for(j=1; j <= n; ++j)
			for(k=1; k <= n; ++k)
				insert(a[i]+a[j]+a[k]);
			
			
	for(i=1; i <= n; ++i)
		for(j=1; j <= n; ++j)
			for(k=1; k <= n; ++k)
				if(S - a[i] - a[j] - a[k] >= 0)
					if(find(S-a[i]-a[j]-a[k]))
					{	
						afis(i,j,k);
						return 0;
					}
	printf("-1\n");
	return 0;
}