Cod sursa(job #1974317)

Utilizator savigunFeleaga Dragos-George savigun Data 27 aprilie 2017 13:13:17
Problema Loto Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <iostream>
#include <fstream>
#include <map>
using namespace std;

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

struct Triple {
    long long a, b, c;
};

class Cmp {
public:
    bool operator()(int a, int b) {
        return a < b;
    }
};

long long n, s, v[101];
map<int, Triple, Cmp> h;


int main() {
    in >> n >> s;
    for (int i = 1; i <= n; ++i) in >> v[i];

    for (int i = 1; i <= n; ++i) {
        for (int j = i; j <= n && v[i] + v[j] <= s; ++j) {
            for (int k = j; k <= n && v[i] + v[j] + v[k] <= s; ++k) {
                int sum = v[i] + v[j] + v[k];
                Triple t;
                t.a = v[i];
                t.b = v[j];
                t.c = v[k];
                h[sum] = t;
            }
        }
    }

    bool found = false;

    for (int i = 1; i <= n && !found; ++i) {
        for (int j = i; j <= n && v[i] + v[j] <= s && !found; ++j) {
            for (int k = j; k <= n && v[i] + v[j] + v[k] <= s && !found; ++k) {
                int sum = v[i] + v[j] + v[k];
                int dif = s - sum;
                if (h.find(dif) != h.end()) {
                    out << v[i] << " " << v[j] << " " << v[k] << " ";
                    out << h[dif].a << " " << h[dif].b << " " << h[dif].c;
                    found = true;
                }
            }
        }
    }

    if (!found) {
        out << -1;
    }

    return 0;
}