Cod sursa(job #1232612)

Utilizator vladrochianVlad Rochian vladrochian Data 23 septembrie 2014 15:40:58
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
#include <unordered_set>
#define FOR() for (int i = 0; i < N; ++i) for (int j = 0; j < N; ++j) for (int k = 0; k < N; ++k)
#define Print() fout << a[i] << " " << a[j] << " " << a[k] << " "
using namespace std;

int N, S, a[105], sum1, sum2, sol[6], found;
unordered_set<int> sum_set;

ifstream fin("loto.in");
ofstream fout("loto.out");

bool GetSums() {
	FOR() {
		int crt_sum = a[i] + a[j] + a[k];
		sum_set.insert(crt_sum);
		if (sum_set.find(S - crt_sum) != sum_set.end()) {
			sum1 = crt_sum;
			sum2 = S - sum1;
			return 1;
		}
	}
	return 0;
}

void GetSol() {
	FOR() {
		int crt_sum = a[i] + a[j] + a[k];
		if (!(found & 1) && crt_sum == sum1) {
			found |= 1;
			Print();
		}
		if (!(found & 2) && crt_sum == sum2) {
			found |= 2;
			Print();
		}
		if (found == 3)
			return;
	}
}

int main() {
	fin >> N >> S;
	for (int i = 0; i < N; ++i)
		fin >> a[i];
	if (GetSums())
		GetSol();
	else
		fout << "-1\n";
	return 0;
}