Cod sursa(job #2745517)

Utilizator bananamandaoneTudor Cosmin Oanea bananamandaone Data 26 aprilie 2021 17:28:48
Problema Loto Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <bits/stdc++.h>
#define prim 700001

using namespace std;

ifstream fin("loto.in");
ofstream fout("loto.out");

//unordered_map<int, pair<int, int> >h;
struct T {int unu, doi, trei;};
vector<T> h[prim];
vector<int> a;
int n, s;

void Citire()
{
    int i, x;
    fin >> n >> s;
    for(i = 1; i <= n; i++)
    {
        fin >> x;
        a.push_back(x);
    }
}

void Rezolvare()
{
    int i, j, k, suma, s1, s2, s3, s4, s5, s6;
    // toate sumele de cate 3 elemente
    for(i = 0; i < (int)a.size(); i++)
        for(j = 0; j < (int)a.size(); j++)
            for(k = 0; k < (int)a.size(); k++)
            {
                suma = a[i] + a[j] + a[k];
                h[suma  % prim].push_back(T{a[i], a[j], a[k]});
            }

    for(i = 0; i < prim; i++)
        if(!h[i].empty())
            for(auto j : h[i])
            {
                // caut (s - suma din cele 3 elemente)
                suma = s - j.unu - j.doi - j.trei;

                // caut in hash
                if(!h[suma % prim].empty())
                {
                    s1 = j.unu;
                    s2 = j.doi;
                    s3 = j.trei;

                    s4 = h[suma % prim][0].unu;
                    s5 = h[suma % prim][0].doi;
                    s6 = h[suma % prim][0].trei;

                    fout << s1 << " " << s2 << " " << s3 << " " << s4 << " " << s5 << " " << s6 << "\n";
                    return;
                }
            }
    fout << -1;
}

int main()
{
    Citire();
    Rezolvare();

    fin.close();
    fout.close();
    return 0;
}