Cod sursa(job #1803341)

Utilizator TincaMateiTinca Matei TincaMatei Data 11 noiembrie 2016 12:06:50
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <cstdio>
#include <algorithm>

const int MAX_N = 100;
const int MAX_S = MAX_N * MAX_N * MAX_N;
int v[MAX_N];
struct sum {
  int val, b1, b2, b3;
}s3[MAX_S];

bool cmp(sum a, sum b) {
  return a.val < b.val;
}

int getPoz(int st, int dr, int val) {
  int mid;
  while(dr - st > 0) {
    mid = (st + dr) / 2;
    if(s3[mid].val < val)
      st = mid + 1;
    else
      dr = mid;
  }
  return dr;
}

int loto[6];

int main() {
  int n, top, s;
  FILE *fin = fopen("loto.in", "r");
  fscanf(fin, "%d%d", &n, &s);
  for(int i = 0; i < n; ++i)
    fscanf(fin, "%d", &v[i]);
  fclose(fin);

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

  top = 0;
  for(int i = 0; i < n; ++i)
    for(int j = i; j < n; ++j)
      for(int k = j; k < n; ++k) {
  printf("%d\n", n);
        s3[top].val = v[i] + v[j] + v[k];
        s3[top].b1 = v[i];
        s3[top].b2 = v[j];
        s3[top].b3 = v[k];
        top++;
      }
  std::sort(s3, s3 + top, cmp);

  int i = -1, j;
  bool ok = false;
  while(i < top && !ok) {
    i++;
    j = getPoz(0, i, s - s3[i].val);
    if(s3[i].val + s3[j].val == s)
      ok = true;
  }

  FILE *fout = fopen("loto.out", "w");
  if(s3[i].val + s3[j].val == s)
    fprintf(fout, "%d %d %d %d %d %d", s3[i].b1, s3[i].b2, s3[i].b3, s3[j].b1, s3[j].b2, s3[j].b3);
  else
    fprintf(fout, "-1");
  fclose(fout);
  return 0;
}