Cod sursa(job #2854805)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 21 februarie 2022 19:36:20
Problema Loto Scor 25
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.44 kb
#define boostIO ios_base::sync_with_stdio(false); fin.tie(nullptr); fout.tie(nullptr);
#pragma GCC optimize ("Ofast")
#include <bits/stdc++.h>

using namespace std;

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

struct triplet{
    int sum, a, b, c;
}; vector <triplet> v;

inline bool cmpSum(const triplet& a, const triplet& b){
    return a.sum < b.sum;
}

int n, s, arr[200];
int st, md, dr, target;

int main (){
    boostIO
    fin>>n>>s;
    for(int i=1; i<=n; i++)
        fin>>arr[i];

    for(int i1=1; i1<=n; i1++)
        for(int i2=1; i2<=n; i2++)
            for(int i3=1; i3<=n; i3++)
                v.emplace_back(triplet{arr[i1]+arr[i2]+arr[i3], arr[i1], arr[i2], arr[i3]});
    sort(v.begin(), v.end(), cmpSum);

    for(int i=0; i < (int)v.size(); i++){
        target = s - v[i].sum;
        if(target == v[i].sum){
            md = i;
            fout<<v[i].a<<" "<<v[i].b<<" "<<v[i].c<<" "<<v[md].a<<" "<<v[md].b<<" "<<v[md].c;
            return 0;
        }

        st = 0;
        dr = i-1;
        while(st <= dr){
            md = (dr - st) / 2 + st;
            if(v[md].sum == target){
                fout<<v[i].a<<" "<<v[i].b<<" "<<v[i].c<<" "<<v[md].a<<" "<<v[md].b<<" "<<v[md].c;
                return 0;
            }

            if(v[md].sum < target)
                st = md + 1;
            else
                dr = md - 1;
        }
    }
    fout<<-1;
    return 0;
}