Cod sursa(job #2781281)

Utilizator dragutamihai1234Draguta Mihai dragutamihai1234 Data 8 octombrie 2021 21:59:08
Problema Loto Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.62 kb

#include <fstream>
#include <unordered_map>

using namespace std;

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

struct triplet {
    int x, y, z;
};

triplet t = {-1, -1, -1};

unordered_map<int, triplet> fr;

int n, s, i, j, k, a[102], has0 = 0;

int main()
{
    f >> n >> s;
    for (i = 1; i <= n; i++) {
        f >> a[i];
        if (a[i] == 0)
            has0 = 1;
    }

    for (i = 1; i < n; i++)
        for (j = i + 1; j <= n; j++)
            if (a[j] < a[i])
                swap(a[i], a[j]);

    if (s > a[n] * 6)
        g << -1;
    else {
        for (i = 1; i <= n; i++)
            for (j = i; j <= n; j++)
                for (k = j; k <= n; k++)
                    fr[a[i] + a[j] + a[k]] = {a[i], a[j], a[k]};

        for (i = 1; i <= n; i++) {
            for (j = i; j <= n; j++) {
                for (k = j; k <= n; k++) {
                    if (s - a[i] - a[j] - a[k] < 0)
                        k = n + 1;
                    else if ((fr[s - a[i] - a[j] - a[k]].x || fr[s - a[i] - a[j] - a[k]].y || fr[s - a[i] - a[j] - a[k]].z) || (s - a[i] - a[j] - a[k] == 0 && has0)) {
                        t = fr[s - a[i] - a[j] - a[k]];
                        g << a[i] << ' ' << a[j] << ' ' << a[k] << ' ';
                        g << t.x << ' ' << t.y << ' ' << t.z;
                        k = n + 1;
                        j = n + 1;
                        i = n + 1;
                    }
                }
            }
        }

        if (t.x == -1 && t.y == -1 && t.z == -1)
            g << -1;
    }

    f.close();
    g.close();
    return 0;
}