Cod sursa(job #533133)

Utilizator feelshiftFeelshift feelshift Data 13 februarie 2011 11:12:02
Problema Loto Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 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());

	int begin = 0;
	int end = sum.size() - 1;

	while(begin != end) {
		while(sum[begin] + sum[end] > dreamedSum && end > 0)
			end--;

		if(sum[begin] + sum[end] == dreamedSum) {
			write(sum[begin]);
			write(sum[end]);

			return (0);
		}

		while(sum[begin] + sum[end] < dreamedSum && begin <= end)
			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;
				}
}