Cod sursa(job #808767)

Utilizator mathboyDragos-Alin Rotaru mathboy Data 7 noiembrie 2012 11:17:48
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <fstream>
#include <algorithm>
#include <functional>
#include <vector>
#include <ctime>
#include <cstdlib>

#define pb push_back
#define f first
#define s second
#define mp make_pair
#define ll long long

const int mod = 666013;
const int maxn = 101;

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

ifstream fin("loto.in");

inline int modd(int x) {
	if(x > mod) return x % mod;
	return x;
}
int main() {
	freopen("loto.out", "w", stdout);
	
	fin >> n >> S;
	
	for(int i = 1; i <= n; ++i)
		fin >> A[i];
	
	for(int i = 1; i <= n; ++i)
		for(int j = i; j <= n; ++j)
			for(int k = j; k <= n; ++k) {
				ll s = A[i] + A[j] + A[k];
				hash[modd(s)].pb(mp(s,mp(i,mp(j,k))));
			}
	
	for(int i = 1; i <= n; ++i)
		for(int j = i; j <= n; ++j)
			for(int k = j; k <= n; ++k) {
				ll s = A[i] + A[j] + A[k];
				if(S < s) continue;
				s = S - s;
				
				int curr = modd(s);
				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;
}