Cod sursa(job #533124)

Utilizator feelshiftFeelshift feelshift Data 13 februarie 2011 10:50:06
Problema Loto Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
// http://infoarena.ro/problema/loto
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;

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

vector<int> input;
vector<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.push_back(*first+*second+*third);

	sort(sum.begin(),sum.end());

	while(!sum.empty()) {
		while(!sum.empty() && sum.front() + sum.back() > dreamedSum)
			sum.pop_back();

		if(sum.front() + sum.back() == dreamedSum) {
			write(sum.front());
			write(sum.back());

			return (0);
		}

		while(!sum.empty() && sum.front() + sum.back() < dreamedSum)
			sum.erase(sum.begin());
	}

	out << -1;

	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;
				}
}