Cod sursa(job #2746645)

Utilizator MihaelaDanilaDanila Mihaela MihaelaDanila Data 28 aprilie 2021 11:15:30
Problema Loto Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.12 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

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

long n,S;
bool posibil = false;
vector<long> numerePosibile;
vector<long> rezultate;
vector<long>::iterator it;

int main(){
    long x,sumaCurenta, rest, st, dr, mij;
    f>>n>>S;
    for(int i=0;i<n;i++){
        f>>x;
        numerePosibile.push_back(x);
    }
            //creem vectorul de sume posibile
    for(int i=0;i<n;i++){
        for(int j=i;j<n;j++){
            for(int k=j;k<n;k++){
                sumaCurenta = numerePosibile[i] + numerePosibile[j] + numerePosibile[k];
                rezultate.push_back(sumaCurenta);
            }
        }
    }

    sort(rezultate.begin(), rezultate.end());
    for(it=rezultate.begin();it!=rezultate.end();it++){
        rest = S - *it;
        st = 0;
        dr = rezultate.size();
        while(st<=dr){
            mij = (st+dr)/2;
            if(rezultate[mij] == rest){
                posibil = true;
                break;
            }else{
                if(rezultate[mij] > rest) dr = mij-1;
                else st = mij+1;
            }
        }
    }
    if(posibil){
        for(int i=0;i<n;i++){
            for(int j=i;j<n;j++){
                for(int k=j;k<n;k++){
                    sumaCurenta = numerePosibile[i] + numerePosibile[j] + numerePosibile[k];
                    if(sumaCurenta == rest){
                        g<<numerePosibile[i]<<" "<<numerePosibile[j]<<" "<<numerePosibile[k]<<" ";
                        break;
                    }
                }
            }
        }
        for(int i=0;i<n;i++){
            for(int j=i;j<n;j++){
                for(int k=j;k<n;k++){
                    sumaCurenta = numerePosibile[i] + numerePosibile[j] + numerePosibile[k];
                    if(sumaCurenta == S-rest){
                        g<<numerePosibile[i]<<" "<<numerePosibile[j]<<" "<<numerePosibile[k]<<" ";
                        break;
                    }
                }
            }
        }
    }else{
        g<<-1;
    }
}