Cod sursa(job #3154707)

Utilizator catalinmarincatalinmarin catalinmarin Data 5 octombrie 2023 18:00:47
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.69 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("loto.in");
ofstream cout("loto.out");
struct chestie{
    int sum;
    int indice1;
    int indice2;
    int indice3;
} sume[1000001];
bool compare(chestie a, chestie b){
    return a.sum < b.sum;
}
int binary_search(int left, int right, int nr){
    int rezultat = 0;
    while (left <= right){
        int mid = (left + right) / 2;
        if (nr <= sume[mid].sum){
            right = mid - 1;
            rezultat = mid;
        } else {
            left = mid + 1;
        }
    }
    if (sume[rezultat].sum == nr)
        return rezultat;
    return -1;
}
int main(){
    int n, suma, contor = 0;
    int numere[101];
    cin >> n >> suma;
    for (int i = 1; i <= n; i++){
        cin >> numere[i];
    }
    for (int i = 1; i <= n; i++){
        for (int j = 1; j <= n; j++){
            for (int k = 1; k <= n; k++) {
                contor++;
                chestie x;
                x.sum = numere[i] + numere[j] + numere[k];
                x.indice1 = numere[i];
                x.indice2 = numere[j];
                x.indice3 = numere[k];
                sume[contor] = x;
            }
        }
    }
    sort(sume+1, sume+1+contor, compare);
    for (int i = 1; i <= contor; i++){
        int complement_binar = suma - sume[i].sum;
        int ind_gasit = binary_search(1, contor, complement_binar);
        if (sume[ind_gasit].sum == complement_binar){
            cout << sume[ind_gasit].indice1 << " " << sume[ind_gasit].indice2 << " " << sume[ind_gasit].indice3 << " ";
            cout << sume[i].indice1 << " " << sume[i].indice2 << " " << sume[i].indice3;
            exit(0);
        }
    }
    cout << -1;
    return 0;
}