Cod sursa(job #3245432)

Utilizator n6v26rDedu Razvan Matei n6v26r Data 28 septembrie 2024 23:24:23
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
// O(n*n*n)
#include <algorithm>
#include <stdio.h>
#include <unordered_map>

#define MAXN 100

using std::unordered_map;

int n, s;
int v[MAXN];

int mod;

struct elem{
  int a;
  int b;
  int c;
};

// sume de 3 elemente
unordered_map<int, elem> map3;

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

  fout = fopen("loto.out", "w");
  bool ok = false;
  for(int i=0; i<n; i++){
    if(v[i]>s) break;
    for(int j=0; j<n; j++){
      if(v[i]+v[j]>s) break;
      for(int k=0; k<n; k++){
        if(v[i]+v[j]+v[k]>s) break;
        map3[v[i]+v[j]+v[k]] = {v[i], v[j], v[k]};
        if(map3.count(s - v[i] - v[j] - v[k])){
          auto other = map3[s - v[i] - v[j] - v[k]];
          ok = true;
          fprintf(fout, "%d %d %d %d %d %d\n",
                  v[i], v[j], v[k],
                  other.a, other.b, other.c);
          break;
        }
      }
      if(ok) break;
    }
    if(ok) break;
  }
  if(!ok)
    fprintf(fout, "-1\n");
  fclose(fout);
  return 0;
}