Cod sursa(job #2789257)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 27 octombrie 2021 11:33:29
Problema Loto Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 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; 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;
}