Cod sursa(job #2297992)

Utilizator zedftwIon Anghel zedftw Data 6 decembrie 2018 22:02:21
Problema Loto Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <fstream>
#include <vector>
#include <unordered_map>
#include <iostream>
#include <bits/unordered_map.h>

#define NMAX 105
#define pb push_back
using namespace std;


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

struct Nums{
    int a, b, c;

    Nums(){
        a = 0;
        b = 0;
        c = 0;
    }

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

int n, S;
vector<int> sums;
int arr[NMAX];
unordered_map<int, Nums> my_map;


bool b_search(int start, int end, int val){


    while(start <= end){
        int mij = (start + end) / 2;
        if(sums[mij] == val){
            return true;
        }
        else if(sums[mij] > val){
            end = mij - 1;
        }
        else{
            start = mij + 1;
        }
    }
    return false;
}

void read_data(){
    in >> n >> S;
    for(int i = 0; i<n; i++){
        int x;
        in >> x;
        arr[i] = x;
    }

    for(int i = 0; i<n; i++){
        for(int j = 0; j<n; j++){
            for(int k = i; k<=j; k++){
                int sum = arr[i] + arr[j] + arr[k];
                sums.pb(sum);
                my_map[sum] = Nums(arr[i], arr[j], arr[k]);
            }
        }
    }

    for(int sum : sums){
        if(b_search(0, (int)sums.size(), S - sum)){
            auto num1 = my_map[sum];
            auto num2 = my_map[S - sum];
            out << num1.a << ' ' << num1.b << ' ' << num1.c << ' ' << num2.a << ' ' << num2.b << ' ' << num2.c << '\n';
            return;
        }
    }
    out << "-1\n";
}


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