Cod sursa(job #2747684)

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

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> nr(N);
    for (i = 0; i < N; ++i)
        in >> nr[i];

    for (i=N-1; i>=0; --i)
        for (j=i; j>=0; --j)
            for (k=j; k>=0; --k)
            {
                perechi[nr[i] + nr[j] + nr[k]].i = nr[i];
                perechi[nr[i] + nr[j] + nr[k]].j = nr[j];
                perechi[nr[i] + nr[j] + nr[k]].k = nr[k];
                perechi[nr[i] + nr[j] + nr[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 - nr[i] - nr[j] - nr[k]].ok)
                {
                    out << nr[i] << " " << nr[j] << " " << nr[k] << " ";
                    out << perechi[S - nr[i] - nr[j] - nr[k]].i << " " << perechi[S - nr[i] - nr[j] - nr[k]].j << " " << perechi[S - nr[i] - nr[j] - nr[k]].k;
                    ok2 = 1;
                }
            }
    if (!ok2)
        out << "-1";
    return 0;
}