Cod sursa(job #533146)

Utilizator feelshiftFeelshift feelshift Data 13 februarie 2011 12:05:23
Problema Loto Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
// http://infoarena.ro/problema/loto
#include <fstream>
#include <algorithm>
#include <vector>
#include <set>
using namespace std;

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


vector<int> input;
set<int> sum;

void write(int toBeFound);

int main() {
	int number,dreamedSum,tmp;

	in >> number >> dreamedSum;
	for(int i=1;i<=number;i++) {
		in >> tmp;
		input.push_back(tmp);
	}

	vector<int>::iterator first,second,third;
	for(first=input.begin();first!=input.end();first++)
		for(second=input.begin();second!=input.end();second++)
			for(third=input.begin();third!=input.end();third++)
				sum.insert(*first+*second+*third);

	set<int>::iterator begin = sum.begin();
	set<int>::reverse_iterator end = sum.rbegin();

	//begin++;
	end++;

	while(*begin != *end) {
		while(*begin + *end > dreamedSum && *begin != *end)
			end++;

		if(*begin + *end == dreamedSum) {
			write(*begin);
			write(*end);

			return (0);
		}

		while(*begin + *end < dreamedSum && *begin != *end)
			begin++;
	}

	out << "-1\n";

	return (0);
}

void write(int toBeFound) {
	vector<int>::iterator first,second,third;
	for(first=input.begin();first!=input.end();first++)
		for(second=input.begin();second!=input.end();second++)
			for(third=input.begin();third!=input.end();third++)
				if(*first + *second + *third == toBeFound) {
					out << *first << " " << *second << " " << *third << " ";
					return;
				}
}