Cod sursa(job #3130384)

Utilizator JuliaG03Julia Grasu JuliaG03 Data 17 mai 2023 17:35:07
Problema Loto Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.11 kb
#include<iostream>
#include<vector>
#include<fstream>
#include<algorithm>
using namespace std;

struct Combinari{
long long suma;
int nr1, nr2, nr3;

bool operator<(const Combinari& obj) const {
        return suma < obj.suma;}
};

void citire(int& n, long long& s, vector<int>& numere){
    ifstream fin("loto.in");
    fin>>n;
    fin>>s;
    numere.resize(n);
    for( int i=0; i<n; i++)
        fin>>numere[i];
    fin.close();
    }

void afisare(const vector<int>& combinari){
ofstream fout("loto.out");
if (combinari.empty())
    fout<<"-1\n";
else{
    for(int i = 0; i< 6; i++)
        fout<<combinari[i]<<" ";
    fout<<"\n";
    }
fout.close();
}

//generare bilet castigator

vector<int> generareBilet(const vector<int>& numere, int sumaCeruta){
    vector<Combinari> combinari;
    int n= numere.size();

    //generarea tuturor combinarilor posibile de 3 numere
    for( int i = 0; i < n; i++){
        for( int j = i; j < n; j++){
            for(int t = j; j < n; j++){
                long long suma = numere[i]+ numere[j]+numere[t];
                combinari.push_back({ suma, i, j, t });
            }
        }
    }

    sort(combinari.begin(),combinari.end());

    //cautam o combinare care ajunge la suma ceruta

        for( int i = 0; i < n; i++){
            for( int j = i; j < n; j++){
                for(int t = j; j < n; j++){
                        long long sumaRamasa = sumaCeruta - numere[i] - numere[j] - numere[t];
                        Combinari combinareCeruta = { sumaRamasa, -1, -1, -1 };
                        auto it = lower_bound(combinari.begin(), combinari.end(), combinareCeruta);
                        if (it != combinari.end() && it->suma == sumaRamasa) {
                            return { numere[i], numere[j], numere[t], numere[it->nr1], numere[it->nr2], numere[it->nr3] };}
                }
            }
        }
    return{};

    }


int main() {
    int n;
    long long s;
    vector<int> numere;

    citire(n, s, numere);
    vector<int> bilet = generareBilet(numere, s);
    afisare(bilet);

    return 0;
}