Cod sursa(job #2747567)

Utilizator monicaandreea46Girbea Monica monicaandreea46 Data 29 aprilie 2021 13:56:12
Problema Loto Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
std::ifstream f("loto.in");
std::ofstream g("loto.out");

int n, sum;
//set cu toate sumele de cate 3 numere
std::unordered_set<int> sume;
//map cu suma de 3 posibila si pozitiile celor 3 in vector
std::unordered_map<int, std::tuple<int, int, int> > poz;
std::vector<int> v;

int main() {
    f>>n>>sum;

    for( int i=0 ; i<n ; i++)
    {
        int x;
        f>>x;
        v.push_back(x);
    }

    for(int i=0 ; i<n ; i++ )
        for(int j=0 ; j<n ; j++ )
            for(int k=0 ; k<n ; k++ ){
                sume.insert( v[i ]+ v[j] + v[k] ); //retinem ca suma celor 3 se poate obtine
                poz[v[i] + v[j] + v[k]] = std::make_tuple( i, j, k ); //retinem pozitiile numerelor
            }

    for(int i=0 ; i<n ; i++ )
        for(int j=0 ; j<n ; j++ )
            for(int k=0 ; k<n ; k++ ) {
                int suma_partiala = v[i] + v[j] + v[k];
                if( sume.find(sum - suma_partiala) != sume.end()) //daca se poate obtine restul pana la sum
                {
                    int x = std::get<0>(poz[ sum - suma_partiala ]);
                    int y = std::get<1>(poz[ sum - suma_partiala ]);
                    int z = std::get<2>(poz[ sum - suma_partiala ]);
                    g<<v[i]<<" "<<v[j]<<" "<<v[k]<<" "<<v[x]<<" "<<v[y]<<" "<<v[z];
                    return 0;
                }
            }

    g<<"-1";
    return 0;
}