Cod sursa(job #2848905)

Utilizator mateitudordmDumitru Matei mateitudordm Data 14 februarie 2022 10:20:23
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <bits/stdc++.h>
#define nmax 100
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")

using namespace std;

int v[nmax + 1], sol[7];
struct grup
{
    int a, b, c;
};
unordered_map<int, grup> f;

int main()
{
    ifstream cin("loto.in");
    ofstream cout("loto.out");
    int n, s, i, j, k;
    ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cin >> n >> s;
    for (i = 1; i <= n; i++)
        cin >> v[i];
    sort(v + 1, v + n + 1);
    for (i = 1; i <= n; i++)
        if (v[i] < s)
            for (j = i; j <= n; j++)
            {
                if (v[i] + v[j] < s)
                {
                    for (k = j; k <= n; k++)
                    {
                        if (v[i] + v[j] + v[k] < s)
                        {
                            f[v[i] + v[j] + v[k]] = {v[i], v[j], v[k]};
                            if (f.find(s - (v[i] + v[j] + v[k])) != f.end())
                            {
                                sol[1] = v[i], sol[2] = v[j], sol[3] = v[k];
                                sol[4] = f[s - (v[i] + v[j] + v[k])].a, sol[5] = f[s - (v[i] + v[j] + v[k])].b, sol[6] = f[s - (v[i] + v[j] + v[k])].c;
                                for (i = 1; i <= 6; i++)
                                    cout << sol[i] << " ";
                                return 0;
                            }
                        }
                        else
                            break;
                    }
                }
                else
                    break;
            }
        else
            break;
    cout << -1;
    return 0;
}