Cod sursa(job #2747852)

Utilizator Zamolxis25Sebastian Gradinaru Zamolxis25 Data 29 aprilie 2021 18:12:36
Problema Loto Scor 95
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.11 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <unordered_map>
#include <set>

using namespace std;

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

vector <int> v;
vector<int> primeleTrei;
unordered_map <int, vector<int>> sume;
int N, S, x, sum;

bool loop(){
    for(int i = 0; i < N; i++){
        for(int j = i; j < N; j++) {
            for (int k = j; k < N; k++) {
                sum = v[i] + v[j] + v[k];
                if (S > sum) {
                    primeleTrei.push_back(v[i]);
                    primeleTrei.push_back(v[j]);
                    primeleTrei.push_back(v[k]);
                    sume[sum] = primeleTrei;
                    primeleTrei.clear();
                }
                if (S > sum && sume.find(S - sum) != sume.end()) {
                    fout << v[i] << " " << v[j] << " " << v[k] << " ";

                    for (auto it : sume[S - sum]) {
                        fout << it << " ";
                    }

                    return true;
                }
            }
        }
    }
    return false;
}

int main(){
    fin >> N >> S;
    for(int i = 0; i < N; i++){
        fin >> x;
        v.push_back(x);
    }

    bool ok = false;

    for(int i = 0; i < N; i++)
        for(int j = i; j < N; j++)
            for(int k = j; k < N; k++){
                sum = v[i] + v[j] + v[k];
                if(S > sum){
                    primeleTrei.push_back(v[i]);
                    primeleTrei.push_back(v[j]);
                    primeleTrei.push_back(v[k]);
                    sume[sum] = primeleTrei;
                    primeleTrei.clear();
                }

                if(S > sum && sume.find(S - sum) != sume.end()){
                    fout << v[i] << " " << v[j] << " " << v[k] << " ";
                    for (auto it : sume[S - sum]) {
                        fout << it << " ";
                    }
                    i = N;
                    j = i;
                    k = j;

                    ok = true;
                }
            }


    if(ok == false)

        fout << -1;

//    if(loop() == false){
//        cout << -1;
//    }

    return 0;
}