Cod sursa(job #2519875)

Utilizator vlad082002Ciocoiu Vlad vlad082002 Data 8 ianuarie 2020 15:35:34
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;

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

struct trei {
    int x, y, z;
};

int v[128], n, s;
bool found;
vector <int> sums;

void citire() {
    fin >> n >> s;
    for(int i = 1; i <= n; i++)
        fin >> v[i];
}

void solve() {
    unordered_map<int, trei> m;
    for(int i = 1; i<= n; i++)
        for(int j = i; j <= n; j++)
            for(int k = j; k <= n; k++)
            if(m.find(v[i] + v[j] + v[k]) == m.end()) {
                m[v[i]+v[j]+v[k]] = {v[i], v[j], v[k]};
                sums.push_back(v[i]+v[j]+v[k]);
            }

    int l = sums.size();
    sort(sums.begin(), sums.end());

    int a = 0, b = l-1;
    while(a <= b) {
        if(sums[a]+sums[b] == s) {
            found = true;
            fout << m[sums[a]].x << ' ' << m[sums[a]].y << ' ' << m[sums[a]].z << ' ' << m[sums[b]].x << ' ' << m[sums[b]].y << ' ' << m[sums[b]].z;
            return;
        } else if(sums[a] + sums[b] < s)
            a++;
        else
            b--;
    }

}


int main() {
    citire();
    solve();
    if (!found) fout << -1;
}