Cod sursa(job #2954406)

Utilizator _andrei4567Stan Andrei _andrei4567 Data 14 decembrie 2022 10:27:06
Problema Loto Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <fstream>
#include <map>
#include <vector>
#include <algorithm>

using namespace std;

ifstream cin ("loto.in");
ofstream cout ("loto.out");

const int N = 100;
int a[3 * N + 2];

map <int, pair <int, int> > m;

vector <int> v;

int n, sum;

int main()
{
    cin >> n >> sum;
    for (int i = 1; i <= n; ++i)
        cin >> a[i];
    for (int i = n + 1; i <= 3 * n; ++i)
        if (i <= 2 * n)
            a[i] = a[i - n];
        else
            a[i] = a[i - 2 * n];
    for (int i = 1; i <= 3 * n; ++i)
        for (int j = i + 1; j <= 3 * n; ++j)
            for (int k = j + 1; k <= 3 * n; ++k)
                if (a[i] + a[j] + a[k] <= sum && m.find(a[i] + a[j] + a[k]) == m.end())
                    m[a[i] + a[j] + a[k]] = {a[i], a[j]};
    bool gasit = false;
    for (auto it : m)
    {
        int dif = sum - it.first;
        if (dif && m.find(dif) != m.end())
        {
            v.push_back(m[dif].second);
            v.push_back(m[dif].first);
            v.push_back(it.first - it.second.first - it.second.second);
            v.push_back(it.second.second);
            v.push_back(it.second.first);
            v.push_back(dif - m[dif].second - m[dif].second);
            sort (v.begin(), v.end());
            for (auto it : v)cout << it << ' ';
            gasit = true;
            return 0;
        }
    }
    if (!gasit)
        cout << "-1";
    return 0;
}