Cod sursa(job #211918)

Utilizator blasterzMircea Dima blasterz Data 3 octombrie 2008 21:14:33
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <cstdio>
#define maxh 666013 // numar prim
struct node{ int v; node *next;};

node *H[maxh];

inline void insert(int v)
{
	int h=v%maxh;
	node *p=new node;
	p->v=v;
	p->next=H[h];
	H[h]=p;
}

inline int find(int v)
{
	int h=v%maxh;
	for(node *p=H[h]; p; p=p->next)
		if(p->v == v) return 1;
	return 0;
}

int a[128], n, S;

int main()
{
	
	int i, j, k;
	int ii, jj, kk;
	
	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=i; j<=n; ++j)
			for(k=j; k<=n; ++k)
				insert(a[i]+a[j]+a[k]);
			
		
	for(i=1; i<=n; ++i)
		for(j=i; j<=n; ++j)
			for(k=j; k<=n; ++k)
				if(S-a[i]-a[j]-a[k] >= 0)
					if(find(S-a[i]-a[j]-a[k]))
					{
						printf("%d %d %d ", a[i], a[j], a[k]);
					
						for(ii=1; ii<=n; ++ii)
							for(jj=ii; jj<=n; ++jj)
								for(kk=jj; kk<=n; ++kk)
									if(a[ii]+a[jj]+a[kk]==S-a[i]-a[j]-a[k])
									{
										printf("%d %d %d\n", a[ii], a[jj], a[kk]);
										return 0;
									}
					}
				
	printf("-1\n");
	
	return 0;
}