Cod sursa(job #345951)

Utilizator exquisiteDamian Alexandru exquisite Data 5 septembrie 2009 18:37:35
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

#define N_MAX 100;

int main() {
	int x, n, sum, i, j, k, ok;
	vector<int> v, s;
	ifstream fin; ofstream fout;
	fin.open("loto.in");
	fout.open("loto.out");
	fin >> n >> sum;
	for (i = 0; i < n; i++) {
		fin >> x;
		v.push_back(x);
	}
	stable_sort(v.begin(), v.end());
	for (i = n - 1; i >= 0; i--) 
		for (j = i; j >= 0; j--) 
			for (k = j; k >= 0; k--) 
				s.push_back(v[i] + v[j] + v[k]);
	stable_sort(s.begin(), s.end());
	ok = 0;
	for (i = n - 1; i >= 0; i--) {
		for (j = i; j >= 0; j--) {
			for (k = j; k >= 0; k--) {
				if (binary_search(s.begin(), s.end(), sum - v[i] - v[j] - v[k])) x = v[i] + v[j] + v[k], ok = 1;
				if (ok) break;
			}
			if (ok) break;
		}
		if (ok) break;
	}
	if (!ok) fout << "-1\n";
	else {
		ok = 0;
		for (i = n - 1; i >= 0; i--) {
			for (j = i; j >= 0; j--) {
				for (k = j; k >= 0; k--) {
					if (v[i] + v[j] + v[k] == x) {fout << v[i] << " " << v[j] << " " << v[k] << " "; ok = 1; }
					if (ok) break;
				}
				if (ok) break;
			}
			if (ok) break;
		}
		ok = 0;
		ok = 0;
		for (i = n - 1; i >= 0; i--) {
			for (j = i; j >= 0; j--) {
				for (k = j; k >= 0; k--) {
					if (v[i] + v[j] + v[k] == sum - x) {fout << v[i] << " " << v[j] << " " << v[k] << " "; ok = 1; }
					if (ok) break;
				}
				if (ok) break;
			}
			if (ok) break;
		}
		fout << "\n";
	}
	fout.close();
	fin.close();
	return 0;
}