Cod sursa(job #1165185)

Utilizator ionutpop118Pop Ioan Cristian ionutpop118 Data 2 aprilie 2014 15:45:26
Problema Loto Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <cstdio>
#include <vector>

using namespace std;

const int mod=1000001;

int v[105];
vector <int> H[mod];

void insert(int x){
	int h;
	h=x%mod;
	H[h].push_back(x);
}

bool qqq(int x){
	int n,h,i;
	h=x%mod;
	n=H[h].size();
	for(i=0;i<n;++i){
		if(H[h][i]==x){
			return 1;
		}
	}
	return 0;
}

int main(){
	freopen("loto.in","r",stdin);
	freopen("loto.out","w",stdout);

	int n,s,i,j,k,A,B=-1,a1,a2,a3;
	bool flag=1;

	scanf("%d%d",&n,&s);

	for(i=1;i<=n;++i){
		scanf("%d",&v[i]);
	}

	for(i=1;i<=n;++i){
		for(j=i;j<=n;++j){
			for(k=j;k<=n;++k){
				insert(v[i]+v[j]+v[k]);
			}
		}
	}

	for(i=1;i<=n&&flag;++i){
		for(j=i;j<=n&&flag;++j){
			for(k=j;k<=n&&flag;++k){
				A=v[i]+v[j]+v[k];
				a1=v[i];
				a2=v[j];
				a3=v[k];
				if(qqq(s-A)){
					B=s-A;
					flag=0;
				}
			}
		}
	}

	for(i=1;i<=n;++i){
		for(j=i;j<=n;++j){
			for(k=j;k<=n;++k){
				if(v[i]+v[j]+v[k]==B){
					printf("%d %d %d %d %d %d\n",a1,a2,a3,v[i],v[j],v[k]);
					return 0;
				}
			}
		}
	}
	printf("-1\n");
	return 0;
}