Cod sursa(job #3295005)

Utilizator itachi_uchihaDarius itachi_uchiha Data 1 mai 2025 14:08:21
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.64 kb
#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;
}