Cod sursa(job #808742)

Utilizator mathboyDragos-Alin Rotaru mathboy Data 7 noiembrie 2012 11:03:27
Problema Loto Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <cstdio>
#include <vector>

#define pb push_back
#define f first
#define s second
#define mp make_pair
const int mod = 666013;
const int maxn = 101;

using namespace std;
vector <pair <int, pair <int, pair <int, int> > > > hash[mod + 1];
int n, S, A[maxn];

int main() {
	freopen("loto.in", "r", stdin);
	freopen("loto.out", "w", stdout);
	
	scanf("%d %d\n", &n, &S);
	
	for(int i = 1; i <= n; ++i)
		scanf("%d", &A[i]);
	
	for(int i = 1; i <= n; ++i)
		for(int j = 1; j <= n; ++j)
			for(int k = 1; k <= n; ++k) {
				int s = A[i] + A[j] + A[k];
				hash[s % mod].pb(mp(s,mp(i,mp(j,k))));
			}
	for(int i = 1; i <= n; ++i)
		for(int j = 1; j <= n; ++j)
			for(int k = 1; k <= n; ++k) {
				int s = A[i] + A[j] + A[k];
				if(S < s) continue;
				s = S - s;
				int curr = s % mod;
				for(int l = 0; l < hash[curr].size(); ++l)
					if(hash[curr][l].f == s) {
						//houston we have a winner
						int a = A[hash[curr][l].s.f];
						int b = A[hash[curr][l].s.s.f];
						int c = A[hash[curr][l].s.s.s];
						
						printf("%d %d %d %d %d %d\n", A[i], A[j], A[k], a, b, c);
						return 0;
					}
			}
	//Gigel pierde
	printf("-1\n");
	
	return 0;
}