Cod sursa(job #533138)

Utilizator feelshiftFeelshift feelshift Data 13 februarie 2011 11:22:42
Problema Loto Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
// http://infoarena.ro/problema/loto
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;

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

struct stuff {
	int first,second,third;
	int value;
};

bool myComp(stuff one,stuff two) {
	return (one.value < two.value);
}

vector<int> input;
vector<stuff> sum;

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++) {
				stuff tmp;

				tmp.first = *first;
				tmp.second = *second;
				tmp.third = *third;
				tmp.value = *first + *second + *third;

				sum.push_back(tmp);
			}

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

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

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

		if(sum[begin].value + sum[end].value == dreamedSum) {
			out << sum[begin].first <<  " " << sum[begin].second << " " << sum[begin].third << " ";
			out << sum[end].first <<  " " << sum[end].second << " " << sum[end].third << "\n";

			return (0);
		}

		while(sum[begin].value + sum[end].value < dreamedSum && begin!=end)
			begin++;
	}

	out << "-1\n";

	return (0);
}