Cod sursa(job #813356)

Utilizator alinaelenaFMI Colceag Alina alinaelena Data 15 noiembrie 2012 11:50:41
Problema Loto Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include<cstdio>
#include<vector>
#define mod 699967
using namespace std;
long long x;
vector <long long> hash[mod];
long long v[101];

int findx ( long long x)
{
	long long i,index=x%mod;
	for (i=0;i<hash[index].size();++i)
		if (x==hash[index][i])
			return 1;
		return 0;
}

void insertx (long long x)
{
	long long i,index=x%mod;
	 if (!findx(x)) hash[index].push_back(x);
}

int main()
{
	long long s;
	long long i,j,k,sp=0;
	int n;
	freopen("loto.in","r",stdin);
	freopen("loto.out","w",stdout);
	scanf("%d %lld",&n,&s);
	
	for (i=1;i<=n;++i)
		scanf("%lld",&v[i]);
	for (i=1;i<=n;++i)
		for (j=1;j<=n;++j)
			for (k=1;k<=n;++k)
			{ x=v[i]+v[j]+v[k];
			if (x<s)
			if (!findx(x))
				insertx(x);
			}
			
	int ok=1;
	
	for (i=1;i<=n&&ok;++i)
		for (j=1;j<=n&&ok;++j)
			for (k=1;k<=n&&ok;++k)
			{
				 sp=v[i]+v[j]+v[k];
			if (findx(s-sp)) {ok=0; printf("%lld %lld %lld ",v[i],v[j],v[k]);s=s-sp;}
						}
			
			if (ok==0)
			{		
		for (i=1;i<=n;++i)				
		for (j=1;j<=n;++j)
			for (k=1;k<=n;++k)
			{
				 sp=v[i]+v[j]+v[k];
			if ((s==sp)&&findx(sp)) printf("%lld %lld %lld ",v[i],v[j],v[k]);
						}			
			} 
else printf("-1\n");			
		
	
}