Cod sursa(job #2774350)

Utilizator Dragono63Stanciu Rares Stefan Dragono63 Data 11 septembrie 2021 12:37:04
Problema Loto Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.62 kb
#include <fstream>
#include <unordered_map>
#include <string>
#include <algorithm>
#define NMAX 105

using namespace std;

/***********************************/
/// INPUT / OUTPUT

ifstream f("loto.in");
ofstream g("loto.out");
/***********************************/
/// GLOBAL DECALARATIONS

int N, S;
int numbers[NMAX];
unordered_map < int, string > mapa;
/***********************************/
/// FUNCTIONS

void ReadInput();
void Solution();
void Output();
/***********************************/
///-------------------------------------------
inline void ReadInput()
{
    f >> N >> S;
    for (int i = 1 ; i <= N ; ++ i)
        f >> numbers[i];
}
///-------------------------------------------
string GetStr(int i, int j, int k)
{
    return to_string(i) + "_" + to_string(j) + "_" + to_string(k);
}
///-------------------------------------------
inline void Solution()
{
    for (int i = 1 ; i <= N ; ++ i)
    {
        for (int j = 1 ; j <= N ; ++ j)
        {
            for (int k = 1 ; k <= N ; ++ k)
            {
                mapa[numbers[i] + numbers[j] + numbers[k]] = GetStr(i, j, k);
            }
        }
    }

    for (int i = 1 ; i <= N ; ++ i)
    {
        for (int j = 1 ; j <= N ; ++ j)
        {
            for (int k = 1 ; k <= N ; ++ k)
            {
                if (mapa.find(S - numbers[i] - numbers[j] - numbers[k]) != mapa.end())
                {
                    string str = mapa[S - numbers[i] - numbers[j] - numbers[k]];
                    int indices[3];
                    int num = 0, ct = 0;
                    for (int idx = 0 ; idx < str.length() ; ++ idx)
                    {
                        if (str[idx] == '_')
                        {
                            indices[ct] = num;
                            ct ++;
                            num = 0;
                        }
                        else
                        {
                            num *= 10;
                            num += (str[idx] - '0');
                        }
                    }
                    int ii = indices[0], jj = indices[1], kk = num;
                    int arr[] = {numbers[i], numbers[j], numbers[k],
                                numbers[ii], numbers[jj], numbers[kk]};
                    sort(arr, arr + 6);
                    for (int i = 0 ; i < 6 ; ++ i)
                        g << arr[i] << " ";
                        return;
                }
            }
        }
    }

    g << "-1";
}
///-------------------------------------------
inline void Output()
{

}
///-------------------------------------------
int main()
{
    ReadInput();
    Solution();
    Output();
    return 0;
}