Cod sursa(job #93889)

Utilizator gigi_becaliGigi Becali gigi_becali Data 20 octombrie 2007 16:11:15
Problema Loto Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <cstdio>
#define maxn 127321
struct nod { int a, b, c;nod(){}; nod(int _a, int _b, int _c){a=_a, b=_b, c=_c;};};
nod H[maxn][23];

inline void insert(int a, int b, int c)
{
	int v=a+b+c;
	int h1=v%maxn;
	int h2=v%23;
	H[h1][h2]=nod(a, b, c);
}
int A, B, C;
inline int find(int v)
{
	if(v<0) return 0;
	int h1=v%maxn;
	int h2=v%23;
	int a=H[h1][h2].a, b=H[h1][h2].b, c=H[h1][h2].c;
	if(a+b+c==v) { A=a; B=b; C=c; return 1;}
	return 0;
}

int main()
{
	int a[128];
	int n, S, 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]);

	int s;
	for(i=1;i<=n;++i)
		for(j=1;j<=n;++j)
			for(k=1;k<=n;++k)
			{
				s=S-a[i]-a[j]-a[k];	
				if(find(s))
				{
					printf("%d %d %d %d %d %d\n", a[i], a[j], a[k], A, B, C);
					return 0;
				}
			}		
	printf("-1\n");	
	return 0;
}