Cod sursa(job #2778035)

Utilizator Maniu_DianaManiu Maria Diana Maniu_Diana Data 27 septembrie 2021 19:59:03
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.04 kb
#include <bits/stdc++.h>

using namespace std;

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

const int P = 370003;

int n, s, v[105];
bool ok;

vector < int > h[370005];

void read()
{
    fin >> n >> s;
    for(int i = 1; i <= n; i ++)
    {
        fin >> v[i];
    }
}

void add(int x)
{
    int rest = x % P;
    if(h[rest].size() == 0 || h[rest][0] != x)
    {
        h[rest].push_back(x);
    }

}

bool exists(int x)
{
    int rest = x % P;
    for(int i = 0; i < h[rest].size(); i ++)
    {
        int el = h[rest][i];
        if(el == x)
            return true;
    }
    return false;
}

void solve()
{
    for(int i = 1; i <= n; i ++)
    {
        for(int j = i; j <= n; j ++)
        {
            for(int k = j; k <= n; k ++)
            {
                int s1 = v[i] + v[j] + v[k];
                add(s1);
            }
        }
    }

    for(int i = 1; i <= n; i ++)
        for(int j = i; j <= n; j ++)
            for(int k = j; k <= n; k ++)
            {
                int s2 = v[i] + v[j] + v[k];
                int comp = s - s2;
                if(comp > 0 && exists(comp))
                {
                    for(int i2 = 1; i2 <= n; i2 ++)
                        for(int j2 = i2; j2 <= n; j2 ++)
                            for(int k2 = j2; k2 <= n; k2 ++)
                            {
                                if(v[i2] + v[j2] + v[k2] == comp)
                                {
                                    fout << v[i] << " ";
                                    fout << v[j] << " ";
                                    fout << v[k] << " ";
                                    fout << v[i2] << " ";
                                    fout << v[j2] << " ";
                                    fout << v[k2] << "\n";
                                    return;
                                }
                            }
                }
            }
        fout << -1;
}

int main()
{
    read();
    solve();
    return 0;
}