Cod sursa(job #2120807)

Utilizator EdyOnuEdy Onu EdyOnu Data 2 februarie 2018 21:39:55
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
// Loto.cpp : Defines the entry point for the console application.
//

//#include "stdafx.h"
#include <fstream>
#include <vector>
#include <iostream>
#include <unordered_map>
#include <algorithm>

using namespace std;

vector <long> numbers;

long S;

void readData() {
	
	ifstream f("loto.in");

	int N;

	long x;

	f >> N >> S;

	while (N--)f >> x,numbers.push_back(x);
}

struct reconstruct {
	int x, y, z;

	reconstruct() = default;

	reconstruct(int a, int b, int c) :x{ a }, y{ b }, z{ c } {}

};

unordered_map <long, reconstruct> partialSums;

void buildPartialSums() {

	ofstream g("loto.out");

	int N = numbers.size();

	reconstruct rec;

	for (int i = 0; i < N; ++i)

		for (int j = 0; j < N; ++j)

			for (int k = 0; k < N; ++k) {

				rec.x = i, rec.y = j, rec.z = k;

				partialSums[numbers[i] + numbers[j] + numbers[k]] = rec;

				if (S - (numbers[i] + numbers[j] + numbers[k]) < 0) continue;

				if (partialSums.count(S - (numbers[i] + numbers[j] + numbers[k])) <= 0)continue;

				rec = partialSums[S - (numbers[i] + numbers[j] + numbers[k])];

				vector <long long> v{ numbers[i], numbers[j], numbers[k], numbers[rec.x], numbers[rec.y], numbers[rec.z] };

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

				for (int el : v) g << el << ' ';

				return;
			}

	g << -1 << '\n';

}

int main() {

	readData();
	buildPartialSums();

	return 0;
}