Cod sursa(job #2010616)

Utilizator frodobiosif aug frodob Data 13 august 2017 20:31:11
Problema Loto Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;
// globals
int sol[6];
bool found  = false;
int n;
int numbers[101];
fstream outfile("loto.out", ios::out);
// prototypes
void recursiv(int level, int sp);

int main(void) {
	int s = 0;
	fstream infile("loto.in", ios::in);
	// read n
	infile>>n;
	// read the sum v
	infile>>s;
	// read numbers
	for(int i=0;i<n; ++i) 
		infile>>numbers[i];
	// order vector
	sort (numbers, numbers+n);
	if (6*numbers[n-1]>=s) // start 
	    recursiv(0, s);
	//
	if (!found)
		outfile<<"-1";

	infile.close();
	outfile.close();
	return 0;
}

void recursiv(int level, int sp){
	if (sp<numbers[n/2]) {
		for(int i=0; (i<n) && (numbers[i]<=sp); ++i) {
		    if (found)
			    break;
		    sol[level] = numbers[i];
		    if (level<5)
			    recursiv(level+1, sp-numbers[i]);
		    else if ((level==5) && (numbers[i]==sp)) {
		        found = true;
			    outfile<<sol[0]<<" "<<sol[1]<<" "<<sol[2]<<" "
		                       <<sol[3]<<" "<<sol[4]<<" "<<sol[5]<<"\n";
				break;
	       }

	    }

	}
	else {
		for(int i=n-1; (i>=0) && (numbers[i]<=sp); --i) {
		    if (found)
			    break;
		    sol[level] = numbers[i];
		    if (level<5)
			    recursiv(level+1, sp-numbers[i]);
		    else if ((level==5) && (numbers[i]==sp)) {
		        found = true;
			    outfile<<sol[0]<<" "<<sol[1]<<" "<<sol[2]<<" "
		                       <<sol[3]<<" "<<sol[4]<<" "<<sol[5]<<"\n";
				break;
	       }

	    }

	}
	return;
}