Cod sursa(job #2297956)

Utilizator GeorgianBaditaBadita Marin-Georgian GeorgianBadita Data 6 decembrie 2018 20:47:20
Problema Loto Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <fstream>
#include <vector>
#include <iostream>
#define N 100003
#define pb push_back
using namespace std;


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

struct Nums{
    int a, b, c;
    Nums(int a, int b, int c){
        this->a = a;
        this->b = b;
        this->c = c;
    }
};


int n, S;
vector<Nums> sums[N];
vector<int> elems;

void add_sum(int s, Nums nums){
    sums[s % N].pb(nums);
}

Nums is_sum(int s){
    if(!sums[s%N].empty()){
        return sums[s%N].front();
    }
    else{
        return {-1, -1, -1};
    }
}

void read_data(){
    in >> n >> S;
    for(int i = 0; i<n; i++){
        int x;
        in >> x;
        elems.pb(x);
    }
}

void solve(){
    for(int i = 0; i< elems.size(); i++){
        for(int j = 0; j<elems.size(); j++){
            for(int k = 0; k<elems.size(); k++){
                add_sum(elems[i] + elems[j] + elems[k], {elems[i], elems[j], elems[k]});
            }
        }
    }

    for(int i = 0; i< elems.size(); i++){
        for(int j = 0; j<elems.size(); j++){
            for(int k = 0; k<elems.size(); k++){
                auto num = is_sum(S - (elems[i] + elems[j] + elems[k]));
                if(num.a > 0){
                    out << num.a << ' ' << num.b << ' ' << num.c << ' ' << elems[i] << ' ' << elems[j] << ' ' << elems[k];
                    return;
                }
            }
        }
    }
    out << -1;
}

int main(){
    read_data();
    solve();
    return 0;
}