Cod sursa(job #2746988)

Utilizator MihaelaDanilaDanila Mihaela MihaelaDanila Data 28 aprilie 2021 19:01:20
Problema Loto Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.81 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];

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