Cod sursa(job #1067326)

Utilizator MarcvsHdrMihai Leonte MarcvsHdr Data 26 decembrie 2013 18:14:57
Problema Loto Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstdlib>
#include <vector>
#include <map>

using namespace std;

struct Node {
  int a, b, c;

  Node() {}

  Node(int a, int b, int c) : a(a), b(b), c(c) {}
};

std::map<int, Node> sols;

int main()
{
  ifstream in("loto.in");
  ofstream out("loto.out");

  int numbers[200];
  int n, s;
  in >> n >> s;
  for (int i = 0; i < n; ++i) {
    in >> numbers[i];
  }

  std::sort(numbers, numbers + n);

  // Create first sums.
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) {
      for (int k = 0; k < n; ++k) {
        sols[numbers[i] + numbers[j] + numbers[k]] = Node(numbers[i], numbers[j], numbers[k]);
      }
    }
  }

  // Look them up and get a solution.
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) {
      for (int k = 0; k < n; ++k) {
        std::map<int, Node>::iterator it =
            sols.find(s - numbers[i] - numbers[j] - numbers[k]);
        if (it != sols.end()) {
          // Write solution and quit.
          std::vector<int> v;
          v.push_back(numbers[i]);
          v.push_back(numbers[j]);
          v.push_back(numbers[k]);
          v.push_back(it->second.a);
          v.push_back(it->second.b);
          v.push_back(it->second.c);
          std::sort(v.begin(), v.end());
          for (int w = 0; w < 6; ++w) {
            out << (w == 0 ? "" : " ") << v[w];
          }
          out << std::endl;
          out.close();
          exit(0);
        }
      }
    }
  }

  out << "-1\n";
  out.close();

  return 0;
}