Pagini recente » Cod sursa (job #1519135) | Cod sursa (job #2862809) | Cod sursa (job #3150048) | Cod sursa (job #1996074) | Cod sursa (job #3295005)
#include <iostream>
#include <fstream>
#include <unordered_map>
using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");
int values[101];
int n, target_sum;
int encode_indices(int a, int b, int c) {
return a * 1000000 + b * 1000 + c;
}
void decode_indices(int code, int& a, int& b, int& c) {
c = code % 1000;
b = (code / 1000) % 1000;
a = code / 1000000;
}
int main() {
fin >> n >> target_sum;
for (int i = 1; i <= n; ++i)
fin >> values[i];
unordered_map<int, int> sum_map;
// Construim toate sumele posibile de 3 numere (prima jumătate)
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
for (int k = 1; k <= n; ++k) {
int partial_sum = values[i] + values[j] + values[k];
int code = encode_indices(i, j, k);
sum_map[partial_sum] = code;
}
// Căutăm în cealaltă jumătate o combinație care completează suma
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
for (int k = 1; k <= n; ++k) {
int partial_sum = values[i] + values[j] + values[k];
int needed = target_sum - partial_sum;
if (sum_map.find(needed) != sum_map.end()) {
int code = sum_map[needed];
int a, b, c;
decode_indices(code, a, b, c);
fout << values[i] << " " << values[j] << " " << values[k] << " ";
fout << values[a] << " " << values[b] << " " << values[c] << "\n";
return 0;
}
}
fout << -1 << "\n";
return 0;
}