Pagini recente » Cod sursa (job #3162721) | Cod sursa (job #1389952) | Cod sursa (job #1907391) | Cod sursa (job #2874773) | Cod sursa (job #1755214)
#include <algorithm>
#include <fstream>
#include <tuple>
#include <vector>
int main() {
int N, S;
std::vector<int> numbers;
std::vector<int> solution;
std::vector<std::tuple<int, int, int, int>> combinations;
std::ifstream fin("loto.in");
std::ofstream fout("loto.out");
fin >> N >> S;
numbers.resize(N);
for (int i = 0; i < numbers.size(); i++)
fin >> numbers[i];
//std::sort(numbers.begin(), numbers.end());
for (size_t i = 0; i < numbers.size(); i++)
for (size_t j = i; j < numbers.size(); j++)
for (size_t k = j; k < numbers.size(); k++)
combinations.push_back(std::make_tuple(
numbers[i] + numbers[j] + numbers[k], numbers[i], numbers[j],
numbers[k]));
std::sort(combinations.begin(), combinations.end());
for (size_t i = 0; i < numbers.size() && !solution.size(); i++)
for (size_t j = i; j < numbers.size() && !solution.size(); j++)
for (size_t k = j; k < numbers.size() && !solution.size(); k++) {
int sum = S - numbers[i] - numbers[j] - numbers[k];
auto iter = std::lower_bound(
combinations.begin(), combinations.end(),
std::make_tuple(sum, 0, 0, 0));
if (sum == std::get<0>(*iter)) {
solution.insert(solution.begin(), {numbers[i], numbers[j], numbers[k],
std::get<1>(*iter), std::get<2>(*iter),
std::get<3>(*iter)});
}
}
std::sort(solution.begin(), solution.end());
for (auto e : solution)
fout << e << " ";
if (!solution.size())
fout << "-1";
fout << std::endl;
return 0;
}