Cod sursa(job #3130454)

Utilizator KrisI77Iacovita Cristian KrisI77 Data 17 mai 2023 20:10:23
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb

#include <fstream>
#include <algorithm>
#include <vector>

typedef long long nat;

struct triple {
	nat v1, v2, v3, sum;
	triple(nat _sum)
		:
		v1(-1),
		v2(-1),
		v3(-1),
		sum(_sum)
	{}
	triple(nat _v1, nat _v2, nat _v3)
		:
		v1(_v1),
		v2(_v2),
		v3(_v3),
		sum(_v1 + _v2 + _v3)
	{}
};

int main() {
	std::ifstream fin("loto.in");
	std::ofstream fout("loto.out");

	int n;
	nat v[100], s;
	fin >> n >> s;

	int cn = n;
	while (cn--) {
		fin >> v[n - cn - 1];
	}
	std::sort(v, v + n);

	std::vector<triple> t;
	for (int i = 0; i < n; ++i)
		for (int j = i; j < n; ++j)
			for (int k = j; k < n; ++k)
				t.push_back(triple(v[i], v[j], v[k]));

	std::sort(t.begin(), t.end(), [](const triple& a, const triple& b) {
		return a.sum < b.sum;
	});

	for (int i = 0; i < n; ++i)
		for (int j = i; j < n; ++j)
			for (int k = j; k < n; ++k) {
				nat sumToSearch = s - v[i] - v[j] - v[k];
				auto dr = std::lower_bound(t.begin(), t.end(), triple(sumToSearch), [](const triple& a, const triple& b) {
					return a.sum < b.sum;
				});
				if (dr != t.end() and dr->sum == sumToSearch) {
					nat rasp[6] = { v[i], v[j], v[k], dr->v1, dr->v2, dr->v3 };
					std::sort(rasp, rasp + 6);
					for (int c = 0; c < 6; ++c)
						fout << rasp[c] << " ";
					return 0;
				}
			}
	fout << -1;
	return 0;
}