Cod sursa(job #2760144)

Utilizator vlad2009Vlad Tutunaru vlad2009 Data 23 iunie 2021 13:01:17
Problema Loto Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.04 kb
#include <fstream>

using namespace std;

const int K = 666019;
const int Nmax = 1e6 + 1;

int a[101], val[Nmax], urm[Nmax], lst[K], nr;

bool exista(int x)
{
    int categoria = x % K;
    int p = lst[categoria];
    while (p != 0)
    {
        if (val[p] == x)
        {
            return true;
        }
        p = urm[p];
    }
    return false;
}

void adauga(int x)
{
    if (exista(x))
    {
        return;
    }
    val[++nr] = x;
    int categoria = x % K;
    urm[nr] = lst[categoria];
    lst[categoria] = nr;
}

int main()
{
    ifstream fin("loto.in");
    ofstream fout("loto.out");
    int n, s;
    fin >> n >> s;
    for (int i = 0; i < n; i++)
    {
        fin >> a[i];
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            for (int k = 0; k < n; k++)
            {
                adauga(a[i] + a[j] + a[k]);
            }
        }
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            for (int k = 0; k < n; k++)
            {
                if (a[i] + a[j] + a[k] <= s)
                {
                    if (exista(s - a[i] - a[j] - a[k]))
                    {
                        fout << a[i] << " " << a[j] << " " << a[k] << " ";
                        for (int x = 0; x < n; x++)
                        {
                            for (int y = 0; y < n; y++)
                            {
                                for (int z = 0; z < n; z++)
                                {
                                    if (a[x] + a[y] + a[z] == s - a[i] - a[j] - a[k])
                                    {
                                        fout << a[x] << " " << a[y] << " " << a[z];
                                    }
                                }
                            }
                        }
                        return 0;
                    }
                }
            }
        }
    }
    fout << "-1";
    return 0;
}