Cod sursa(job #2733087)

Utilizator icnsrNicula Ionut icnsr Data 29 martie 2021 21:00:56
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <fstream>
std::ifstream fin("loto.in");
std::ofstream fout("loto.out");
#include <vector>
#include <algorithm>
#include <unordered_map>
#include <tuple>
#include <unordered_map>

int main()
{
    unsigned N;
    int S;
    fin >> N >> S;

    std::vector<int> vec;
    vec.reserve(N);
    for(unsigned i = 0; i < N; ++i)
    {
        int value;
        fin >> value;
        vec.push_back(value);
    }

    std::unordered_map<int, std::tuple<unsigned char, unsigned char, unsigned char>> sums;
    sums.reserve(N * N * N);

    for(unsigned i = 0; i < N; ++i)
    {
        for(unsigned j = i; j < N; ++j)
        {
            for(unsigned k = j; k < N; ++k)
            {
                sums[S - (vec[i] + vec[j] + vec[k])] = {i, j, k};
            }
        }
    }

    for(unsigned i = 0; i < N; ++i)
    {
        for(unsigned j = i; j < N; ++j)
        {
            for(unsigned k = j; k < N; ++k)
            {
                const int currentsum = vec[i] + vec[j] + vec[k];
                const auto it = sums.find(currentsum);
                if(it != sums.cend())
                {
                    const auto& tup = it->second;
                    fout << vec[i] << ' ' << vec[j] << ' ' << vec[k] << ' ';
                    fout << vec[std::get<0>(tup)] << ' ' << vec[std::get<1>(tup)] << ' '
                         << vec[std::get<2>(tup)] << '\n';
                    return 0;
                }
            }
        }
    }
    fout << -1 << '\n';
}