Cod sursa(job #542926)

Utilizator feelshiftFeelshift feelshift Data 27 februarie 2011 11:16:17
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
// http://infoarena.ro/problema/loto
#include <fstream>
#include <algorithm>
using namespace std;

#define maxSize 101

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

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

stuff sum[maxSize*maxSize*maxSize];

bool comp(stuff first,stuff second);

int main() {
	int number,dreamedSum;
	int length = 0;
	int input[maxSize];

	in >> number >> dreamedSum;
	for(int i=1;i<=number;i++)
		in >> input[i];

	// calculam toate sumele de trei numere
	// (suma cautate de noi, de sase numere,
	// va fi suma a doua sume de trei numere)
	for(int i=1;i<=number;i++)
		for(int j=1;j<=number;j++)
			for(int k=1;k<=number;k++) {
				sum[++length].first = input[i];
				sum[length].second = input[j];
				sum[length].third = input[k];
				sum[length].sum = input[i] + input[j] + input[k];
			}

	// sortam in ordine crescatoare
	sort(sum+1,sum+length+1,comp);

	/*int left,right,middle,toBeFound;
	for(int i=1;i<=length;i++) {
		left = 1;
		right = length;
		toBeFound = dreamedSum - sum[i].sum;

		while(left <= right) {
			middle = (left + right) >> 1;

			if(sum[middle].sum == toBeFound) {
				out << sum[i].first << " " << sum[i].second << " " << sum[i].third << " ";
				out << sum[middle].first << " " << sum[middle].second << " " << sum[middle].third << " ";

				in.close();
				out.close();
				return (0);
			}
			else
				if(sum[middle].sum < toBeFound)
					left = middle + 1;
				else
					right = middle - 1;
		}
	}*/

	out << "-1\n";

	in.close();
	out.close();

	return (0);
}

bool comp(stuff first,stuff second) {
	return (first.sum < second.sum);
}