Cod sursa(job #1370248)

Utilizator allexx2200Atanasiu Alexandru-Marian allexx2200 Data 3 martie 2015 13:34:59
Problema Loto Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <stdio.h>
#include <unordered_map>
#include <vector>

#define VECTOR_SIZE 100
#define FIN "loto.in"
#define FOUT "loto.out"

struct vector3{ int i,j,k; };

int N,S;
int v[VECTOR_SIZE];
FILE *in,*out;
int sol[6];

void loto(){
  std::unordered_map<int,vector3> hashTable;
  for(int i=0; i < N; i++){
    for(int j=0; j < N; j++){
      for(int k=0; k < N; k++){
	vector3 aux {v[i],v[j],v[k]};
	hashTable[v[i]+v[j]+v[k]] = aux;
      }
    }
  }
    
  bool found = false;
  vector3 *first,*second;
  
  for(auto it = hashTable.begin(); it != hashTable.end(); ++it){
    int aux = it->first;
    first = &(it->second);
    try{
      second = &(hashTable.at(S-aux));
      found = true;
      break;
    }catch(std::out_of_range o){}
  } 
  
  if(!found){
    sol[0] = -1;
  } else {
    sol[0] = first->i;
    sol[1] = first->j;
    sol[2] = first->k;
    sol[3] = second->i;
    sol[4] = second->j;
    sol[5] = second->k;
  } 
}

int main(){
  in = fopen(FIN, "rt");
  out = fopen(FOUT, "wt");
  
  int res;
  
  res = fscanf(in, "%d%d", &N, &S);
  for(int i=0; i < N; i++){
    res = fscanf(in, "%d", &v[i]);
  }
  res++;
  
  loto();
  
  if(sol[0] == -1){
    fprintf(out, "-1");
  } else {
    for(int i=0; i < 6; i++){
      fprintf(out, "%d ", sol[i]);
    }
  }
  
  fclose(in);
  fclose(out);
  return 0;
}