Cod sursa(job #2223159)

Utilizator YusyBossFares Yusuf YusyBoss Data 19 iulie 2018 11:26:18
Problema Loto Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>
#include <algorithm>

using namespace std;

int v[103];

struct suma {
  int s;
  int a, b, c;
};

bool cmp (suma A, suma B) {
  return A.s < B.s;
}

suma sum[1000003];

int cb(int x, int m) {
  int st, dr, mij;
  st = 0;
  dr = m;
  while (st <= dr) {
    mij = (st + dr) / 2;
    if (sum[mij].s > x)
      dr = mij - 1;
    else if (sum[mij].s < x)
      st = mij + 1;
    else
      return mij;
  }
  return -1;
}

int main() {
  ifstream cin ("loto.in");
  ofstream cout ("loto.out");
  int n, s, i, j, k, m, x, a;
  cin >> n >> s;
  for (i = 0; i < n; i++)
    cin >> v[i];
  m = 0;
  for (i = 0; i < n; i++) {
    for (j = 0; j < n; j++) {
      for (k = 0; k < n; k++) {
        sum[m].s = v[i] + v[j] + v[k];
        sum[m].a = v[i];
        sum[m].b = v[j];
        sum[m].c = v[k];
        m++;
      }
    }
  }
  sort (sum, sum + m, cmp);
  for (i = 0; i < m; i++) {
    x = s - sum[i].s;
    a = cb(x, m);
    if (a != -1) {
      cout << sum[i].a;
      cout << " ";
      cout << sum[i].b;
      cout << " ";
      cout << sum[i].c;
      cout << " ";
      cout << sum[a].a;
      cout << " ";
      cout << sum[a].b;
      cout << " ";
      cout << sum[a].c;
      return 0;
    }
  }
  cout << -1;
  return 0;
}