Cod sursa(job #854352)

Utilizator ioanapopaPopa Ioana ioanapopa Data 13 ianuarie 2013 13:57:41
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include<cstdio>
#include<vector>
#define M 666013
using namespace std;

vector<int> v[M];
unsigned a[101], n ;

void adaug(int x)
{
	int element = x % M;
	v[element].push_back(x);
}

int cauta(int x)
{
	int element = x % M;
	for(vector<int>::iterator it = v[element].begin() ; it != v[element].end() ; ++it)
		if(*it == x )
			return 1;
		return 0;
}

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]);
				}
}

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;
}