Cod sursa(job #316157)

Utilizator blasterzMircea Dima blasterz Data 18 mai 2009 17:32:15
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#define maxh 666013
#define pb push_back

using namespace std;


vector<int> H[maxh];
int a[101], n, S;

typedef vector<int>::iterator vit;

inline void insert(int v)
{
	int h=v%maxh;
	H[h].pb(v);
}

inline int find(int v)
{
	int h=v%maxh;
	if(find(H[h].begin(), H[h].end(), v) == H[h].end()) return 0;
	return 1;
}

void afis(int x, int y, int z)
{
	int i, j, k, s= S - a[x] - a[y] - a[z];
	for(i=1; i <= n; ++i)
		for(j=1; j <= n; ++j)
			for(k=1; k <= n; ++k)
				if(a[i] + a[j] + a[k] == s)
				{
					printf("%d %d %d %d %d %d\n", x, y, z, i, j, k);
					return;
				}
}

int main()
{
	int 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]);
			
			
	for(i=1; i <= n; ++i)
		for(j=i; j <= n; ++j)
			for(k=j; k <= n; ++k)
				if(S - a[i] - a[j] - a[k] >= 0)
					if(find(S-a[i]-a[j]-a[k]))
					{	
						afis(i,j,k);
						return 0;
					}
	printf("-1\n");
	return 0;
}