Cod sursa(job #182457)

Utilizator gigi_becaliGigi Becali gigi_becali Data 20 aprilie 2008 22:03:26
Problema Loto Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
using namespace std;
#include <set>
#include <cstdio>
#define maxh 666013
//struct nod { int v; nod *n;};

//nod *H[maxh];
int a[101],n;

set<int>H[maxh];

inline void insert(int v)
{
	int h=v%maxh;
	H[h].insert(v);
/*
	nod *p=new nod;
	p->v=v;
	p->n=H[h];
	H[h]=p;
	*/
}

inline int find(int v)
{
	int h=v%maxh;
	if(H[h].find(v)!=H[h].end())return 1;
	return 0;
//	for(vector<int>::iterator i=H[h].begin();i!=H[h].end();++i)
	//	if(*i==v) return 1;
	//return 0;
	/*
	for(nod* p=H[h]; p; p=p->n)
		if(p->v==v) return 1;
	return 0;
		*/
}

inline void afis(int S)
{
	int i, j, k;
	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 ", a[i], a[j], a[k]);
					return ;
				}
}

int main()
{
	int  i, j, k, S;
	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 && find(S-a[i]-a[j]-a[k]))
				{
					afis(S-a[i]-a[j]-a[k]);
					printf("%d %d %d\n", a[i], a[j], a[k]);
					return 0;
				}
			
			
	printf("-1\n");
	return 0;
}