Cod sursa(job #854364)

Utilizator ioanapopaPopa Ioana ioanapopa Data 13 ianuarie 2013 14:38:17
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include<cstdio>

#define M 666013

using namespace std;

struct nod
{
	int x;
	nod *urm;
};

nod *v[M];
int a[101],n;

inline void adaug(int x)
{
	int element = x % M;
	nod *p = new nod;
	p->x = x;
	p->urm = v[element];
	v[element] = p;
}

inline int cauta(int x)
{
	nod *p;
	int element = x % M;
	for(p = v[element]; p; p = p->urm)
		if(p->x == x )
			return 1;
		return 0;
}

inline void afisare(int s)
{
	for(unsigned i = 1 ; i <= n ; i++)
		for(unsigned j = 1 ; j <= n ; j++)
			for(unsigned k = 1 ; k <= n ; k++)
				if(a[i]+a[j]+a[k] == s)
				{
					printf("%d %d %d ",a[i],a[j],a[j]);
					return ;
				}
}

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