Cod sursa(job #954518)

Utilizator toranagahVlad Badelita toranagah Data 29 mai 2013 12:43:32
Problema Loto Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <algorithm>
#include <fstream>
#include <iostream>
#include <map>
#include <tuple>
#include <vector>
using namespace std;

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

const int DRAWS = 6;
int N, S;
int nums[DRAWS];
map<int, tuple<int, int, int>> sums;

void read_input();
void solve();

int main() {
  read_input();
  solve();

  return 0;
}

void read_input() {
  fin >> N >> S;
  for (int i = 0; i < DRAWS; ++i) {
    fin >> nums[i];
  }
}


void solve() {
  for (int i = 0; i < DRAWS; ++i) {
    for (int j = 0; j < DRAWS; ++j) {
      for (int k = 0; k < DRAWS; ++k) {
        int sum = nums[i] + nums[j] + nums[k];
        sums[sum] = make_tuple(nums[i], nums[j], nums[k]);
      }
    }
  }

  for (int i = 0; i < DRAWS; ++i) {
    for (int j = 0; j < DRAWS; ++j) {
      for (int k = 0; k < DRAWS; ++k) {
        int sum = nums[i] + nums[j] + nums[k];
        if (sum > S) continue;
        
        auto it = sums.find(S - sum);
        if (it != sums.end()) {
          vector<int> answer;
          answer.push_back(nums[i]);
          answer.push_back(nums[j]);
          answer.push_back(nums[k]);
          

          answer.push_back(get<0>(it->second));
          answer.push_back(get<1>(it->second));
          answer.push_back(get<2>(it->second));
          sort(answer.begin(), answer.end());

          for (auto l : answer) {
            fout << l << ' ';
          }
          return;
        }
      }
    }
  }
  fout << -1;
}