Cod sursa(job #3132026)

Utilizator Alex_Cristea72Cristea Alexandru Alex_Cristea72 Data 21 mai 2023 22:46:43
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.99 kb
#include <iostream>
#include <fstream>
#include <unordered_map>
#include <vector>

using namespace std;
ifstream f1("loto.in");
ofstream f2("loto.out");


int main() {


    int N;
    int S = 0;
    bool gasit = false;
    unordered_map<int, pair<int, std::vector<int>>> map_nr;
    vector<int> vec_nr;

    f1 >> N >> S;
    vec_nr.resize(N);

    for (int i = 0; i < N; i++) {
        f1 >> vec_nr[i];
    }
    int i, j, k;
    for (i = 0; i < N; i++) {
        for (j = i; j < N; j++) {
            for (k = j; k < N; k++) {
                vector<int> temp;
                int num1 = vec_nr[i];
                int num2 = vec_nr[j];
                int num3 = vec_nr[k];

                temp.push_back(num1);
                temp.push_back(num2);
                temp.push_back(num3);

                int sum = num1 + num2 + num3;
                int complement = S - sum;

                pair<int, vector<int>> inner_pair;
                inner_pair.first = complement;
                inner_pair.second = temp;

                map_nr.insert(make_pair(sum, inner_pair));
            }
        }
    }


    for (i = 0; i < N; i++) {
        for (j = i; j < N; j++) {
            for (k = j; k < N; k++) {
                int sum = vec_nr[i] + vec_nr[j] + vec_nr[k];
                if (map_nr.count(S - sum) != 0 && sum == map_nr[S - sum].first) {
                    vector<int> vect_temp = map_nr[S - sum].second;
                    f2 << vec_nr[i] << " ";
                    f2 << vec_nr[j] << " ";
                    f2 << vec_nr[k] << " ";
                    int idx;
                    for (idx = 0; idx < vect_temp.size(); idx++) {
                        f2 << vect_temp[idx] << " ";
                    }
                    gasit = true;
                    break;
                }

            }
            if (gasit == true) {
                break;
            }
        }
        if (gasit == true) {
            break;
        }
    }

    if (gasit == false) {
        f2 << -1;
    }

    return 0;
}