Cod sursa(job #2746983)

Utilizator MihaelaDanilaDanila Mihaela MihaelaDanila Data 28 aprilie 2021 18:57:28
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

long long n,S;
long long nr;
long long sumePosibile[101];
long long rezultate[1000002];

void afisare(long long s1){
    for (int i=1;i<=n;i++){
        for (int j=i;j<=n;j++){
            for (int k=j;k<=n;k++){
                if (sumePosibile[i]+sumePosibile[j]+sumePosibile[k]==s1){
                    g<<sumePosibile[i]<<" "<<sumePosibile[j]<<" "<<sumePosibile[k]<<" ";
                    return;
                }
            }
        }
    }
}

int main(){
    int st,dr,mij,rest;
    f>>n>>S;
	for(int i=1;i<=n;i++){
		f>>sumePosibile[i];
	}
	nr=0;
	for(int i=1;i<=n;i++){
		for(int j=i;j<=n;j++){
			for(int k=j;k<=n;k++){
				rezultate[nr]=sumePosibile[i]+sumePosibile[j]+sumePosibile[k];
				nr++;
			}
		}
	}

	sort(rezultate,rezultate+nr);

    bool posibil = false;
	for (int i=0;i<nr && posibil == false;i++){
		rest=S-rezultate[i];
		st=0;
		dr=nr-1;
		while (st<=dr && posibil == false){
			mij=(st+dr)/2;
			if (rezultate[mij]==rest){
				afisare(rest);
				afisare(S-rest);
				posibil = true;
            }
			if (rezultate[mij]>rest) dr=mij-1;
			else st=mij+1;
		}
	}
	if(posibil == false) g<<-1;
	return 0;
}