Cod sursa(job #3165856)

Utilizator IvanAndreiIvan Andrei IvanAndrei Data 7 noiembrie 2023 08:17:34
Problema Loto Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <bits/stdc++.h>

using namespace std;

struct str{
    long long s, x, y, z;
    bool operator < (const str & aux) const
    {
        return s < aux.s;
    }
};

const long long max_size = 1e2 + 3;

long long v[max_size];
vector <str> sume;

signed main ()
{
    #ifdef LOCAL
       freopen("test.in", "r", stdin);
       freopen("test.out", "w", stdout);
    #else
       freopen("loto.in", "r", stdin);
       freopen("loto.out", "w", stdout);
    #endif // LOCAL
    long long n, s;
    cin >> n >> s;
    for (long long i = 1; i <= n; i++)
    {
        cin >> v[i];
    }
    for (long long i = 1; i <= n; i++)
    {
        for (long long j = 1; j <= n; j++)
        {
            for (long long k = 1; k <= n; k++)
            {
                long long sum = v[i] + v[j] + v[k];
                str aux = {sum, i, j, k};
                sume.push_back(aux);
            }
        }
    }
    sort(sume.begin(), sume.end());
    for (auto f : sume)
    {
        long long x = s - f.s;
        if (x < 0)
        {
            continue;
        }
        long long st = -1, e = 20;
        while (e >= 0)
        {
            if (st + (1LL << e) < sume.size() && sume[st + (1LL << e)].s < x)
            {
                st += (1 << e);
            }
            e--;
        }
        st++;
        if (st < sume.size() && sume[st].s == x)
        {
            cout << f.x << " " << f.y << " " << f.z << " " << sume[st].x << " " << sume[st].y << " " << sume[st].z;
            return 0;
        }
    }
    cout << -1;
    return 0;
}