Cod sursa(job #2747678)

Utilizator 6kmeleon6Luca Cordus 6kmeleon6 Data 29 aprilie 2021 15:38:06
Problema Loto Scor 95
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <iostream>
#include <fstream>
#include <unordered_map>
#include <vector>

using namespace std;

ifstream in("loto.in");
ofstream out("loto.out");

struct sum
{
    bool ok = false;
    int i, j, k;
};

int main()
{
    int  N, S, i, j, k;
    bool ok2 = false;
    unordered_map <int, sum> perechi; /// Pentru suma X vom atasa o pereche din care rezulta acea suma
    in >> N >> S;
    vector <int> numere(N);
    for (i = 0; i < N; ++i)
        in >> numere[i];

    for (i=N-1; i>=0; --i)
        for (j=i; j>=0; --j)
            for (k=j; k>=0; --k)
            {
                perechi[numere[i] + numere[j] + numere[k]].i = numere[i];
                perechi[numere[i] + numere[j] + numere[k]].j = numere[j];
                perechi[numere[i] + numere[j] + numere[k]].k = numere[k];
                perechi[numere[i] + numere[j] + numere[k]].ok = 1;
            }

    for (i=N-1; i>=0 && !ok2; --i)
        for (j=i; j>=0 && !ok2; --j)
            for (k=j; k>=0 && !ok2; --k)
            {
                if (perechi[S - numere[i] - numere[j] - numere[k]].ok)
                {
                    out << numere[i] << " " << numere[j] << " " << numere[k] << " ";
                    out << perechi[S - numere[i] - numere[j] - numere[k]].i << " " << perechi[S - numere[i] - numere[j] - numere[k]].j << " " << perechi[S - numere[i] - numere[j] - numere[k]].k;
                    ok2 = 1;
                }
            }
    if (!ok2)
        out << "-1";
    return 0;
}