Cod sursa(job #2498042)

Utilizator pregoliStana Andrei pregoli Data 23 noiembrie 2019 13:58:52
Problema Loto Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.79 kb
#include <bits/stdc++.h>
#define newline '\n'
#define ll long long
#define uns unsigned
#define deb(x) cerr << x << ' '
#define debnewL(x) cerr << x << newline
using namespace std;
///************************************
ifstream fin("loto.in");
ofstream fout("loto.out");
///************************************

const uns P = 370003;
int n, S;
vector <int> h[P + 2];
int v[105];

inline void Read()
{
    fin >> n >> S;
    for (int i = 1; i <= n; i++)
    {
        fin >> v[i];
    }

    for (int i = 1; i <= n; i++)
        for (int j = i; j <= n; j++)
            for (int k = j; k <= n; k++)
            {
                int s = v[i] + v[j] + v[k];
                h[s % P].push_back(s);
            }
}

inline void Solve()
{
    for (int i = 1; i <= n; i++)
        for (int j = i; j <= n; j++)
            for (int k = j; k <= n; k++)
            {
                int s = v[i] + v[j] + v[k];
                int dif = S - s;
                if (dif <= 0)
                    continue;
                int r = dif % P;
                for (int t = 0; t < h[r].size(); t++)
                    if (h[r][i] == dif)
                    {
                        for (int ii = 1; ii <= n; ii++)
                            for (int jj = ii; jj <= n; jj++)
                                for (int kk = jj; kk <= n; kk++)
                                    if (v[ii] + v[jj] + v[kk] == dif)
                                    {
                                        fout << v[i] << ' ' << v[j] << ' ' << v[k] << ' ' << v[ii] << ' ' << v[jj] << ' ' << v[kk];
                                        return;
                                    }
                    }
            }
    fout << -1;
}

int main()
{
    Read();
    Solve();
    return 0;
}