Cod sursa(job #2746893)

Utilizator truscalucaLuca Trusca truscaluca Data 28 aprilie 2021 17:37:53
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.65 kb
#include <iostream>
#include <unordered_map>

using namespace std;

const int nMax = 105;

struct Suma {
    int a, b, c;
};

unordered_map<int, Suma> sume;
int n, s, v[nMax];

int main() {
    freopen("loto.in", "r", stdin);
    freopen("loto.out", "w", stdout);

    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    // Citeste datele de intrare
    cin >> n >> s;
    for (int i = 0; i < n; i++) {
        cin >> v[i];
    }

    // Calculeaza sume de 3
    for (int i1 = 0; i1 < n; i1++) {

        // Incepe de la i1 (si nu 0) pentru a nu repeta elemente
        for (int i2 = i1; i2 < n; i2++) {

            // Incepe de la i2 (si nu 0) pentru a nu repeta elemente
            for (int i3 = i2; i3 < n; i3++) {
                
                // Adauga elemente in lista de tipul cheie=suma valoare=numerele din care se compune suma
                sume[v[i1] + v[i2] + v[i3]] = {v[i1], v[i2], v[i3]};
            }
        }
    }

    // Parcurge fiecare suma de 3
    for (auto &suma1: sume) {
        // Cauta daca `suma dorita - suma curenta` se afla in lista
        auto suma2 = sume.find(s - (suma1.second.a + suma1.second.b + suma1.second.c));

        if (suma2 != sume.end()) {
            // Daca se afla, afiseaza numerele ce compun suma si opreste programul
            cout << suma1.second.a << " " << suma1.second.b << " " << suma1.second.c << " "
                 << suma2->second.a << " " << suma2->second.b << " " << suma2->second.c;
            return 0;
        }
    }

    // Nicio suma de mai sus nu a intrat in if-ul cu `return 0`, ceea ce inseamna ca nicio suma nu
    // a fost gasita, deci trebuie afisat -1.
    cout << "-1";

    return 0;
}