Cod sursa(job #2746986)

Utilizator MihaelaDanilaDanila Mihaela MihaelaDanila Data 28 aprilie 2021 18:59:41
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.84 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){
}

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;
	else{
        bool ok = false;
        for (int i=1;i<=n&&ok==false;i++){
            for (int j=i;j<=n&&ok==false;j++){
                for (int k=j;k<=n&&ok==false;k++){
                    if (sumePosibile[i]+sumePosibile[j]+sumePosibile[k]==rest){
                        g<<sumePosibile[i]<<" "<<sumePosibile[j]<<" "<<sumePosibile[k]<<" ";
                        ok=true;
                    }
                }
            }
        }
        ok = false;
        for (int i=1;i<=n&&ok==false;i++){
            for (int j=i;j<=n&&ok==false;j++){
                for (int k=j;k<=n&&ok==false;k++){
                    if (sumePosibile[i]+sumePosibile[j]+sumePosibile[k]==S-rest){
                        g<<sumePosibile[i]<<" "<<sumePosibile[j]<<" "<<sumePosibile[k]<<" ";
                        ok=true;
                    }
                }
            }
        }
	}
	return 0;
}