Cod sursa(job #2012525)

Utilizator frodobiosif aug frodob Data 18 august 2017 23:04:22
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>

using namespace std;

class Element{
public:
	char a;
	char b;
	char c;
	int s;
	Element():a(0),b(0),c(0),s(0) {};
	Element(char i, char j, char k): a(i),b(j),c(k) {
		s = int(a)+int(b)+int(c);
	};
};
// ordering function
bool elemComp (Element x,Element y) {return (x.s<y.s);}
int main(void) {
	int s = 0;
	int sp = 0;
    bool found  = false;
    int n;
	vector<Element> vsum;
    int numbers[101];
	fstream infile("loto.in", ios::in);
	fstream outfile("loto.out", ios::out);

	// read n, s
	infile>>n>>s;
	// read numbers
	for(int i=0;i<n; ++i)
		infile>>numbers[i];
	// compute sums
	for(int i=0;i<n;++i)
		for(int j=0;j<n;++j)
			for(int k=0;k<n;++k) {
				Element elm(numbers[i], numbers[j], numbers[k]);
				vsum.push_back(elm);
			}
    // sort
	sort(vsum.begin(), vsum.end(), elemComp);
	//
	int size = vsum.size();
	if ((s>=2*vsum[0].s) && (s<=2*vsum[size-1].s)) {
		int nmax = (2*s<vsum[size/2].s)?size/2+1:size;
		for(int i=0;i<nmax && !found;++i) {
			sp = s-vsum[i].s;
			for(int k=i;k<nmax;++k)
				if (vsum[k].s==sp) {
					found = true;
					outfile<<int(vsum[i].a)<<" "<<int(vsum[i].b)<<" "<<int(vsum[i].c)<<" "
						<<int(vsum[k].a)<<" "<<int(vsum[k].b)<<" "<<int(vsum[k].c);
					break;
				}
		}
	}
	else
		found = false;
	if (!found)
		outfile<<"-1";

	infile.close();
	outfile.close();
	return 0;
}