Cod sursa(job #1369934)

Utilizator allexx2200Atanasiu Alexandru-Marian allexx2200 Data 3 martie 2015 12:19:49
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.01 kb
#include <stdio.h>
#include <map>

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

using namespace std;

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

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

int sol1[6],sol2[6];

void bruteForce(){
  for(int i=0; i < N; i++){
    for(int j=0; j < N; j++){
      for(int k=0; k < N; k++){
	for(int l=0; l < N; l++){
	  for(int o=0; o < N; o++){
	    for(int p=0; p < N; p++){
	      if(S == v[i] + v[j] + v[k] + v[l] + v[o] + v[p]){
		sol1[0] = v[i];
		sol1[1] = v[j];
		sol1[2] = v[k];
		sol1[3] = v[l];
		sol1[4] = v[o];
		sol1[5] = v[p];
		return;
	      }
	    }
	  }
	}
      }
    }
  }
  sol1[0] = -1;
}

void loto(){
  std::map<int,vector3> hashTable;
  for(int i=0,s=0; i < N; i++){
    for(int j=0; j < N; j++){
      for(int k=0; k < N; k++,s++){
	vector3 aux {v[i],v[j],v[k]};
	hashTable[v[i]+v[j]+v[k]] = aux;
	//sume[s] = v[i]+v[j]+v[k];
      }
    }
  }
  
  for(std::map<int,vector3>::iterator it = hashTable.begin(); it != hashTable.end(); ++it){
    printf("%d:(%d,%d,%d)\n", it->first, (it->second).i,(it->second).j,(it->second).k);
  }
  
  bool found = false;
  vector3 first,second;
  for(std::map<int,vector3>::iterator it = hashTable.begin(); it != hashTable.end(); ++it){
    //printf("%d:(%d,%d,%d)\n", it->first, (it->second).i,(it->second).j,(it->second).k);
    int aux = it->first;
    first = it->second;
    try{
      second = hashTable.at(S-aux);
      found = true;
      break;
    }catch(std::out_of_range o){}
  }
  
  if(!found){
    sol2[0] = -1;
  } else {
    sol2[0] = first.i;
    sol2[1] = first.j;
    sol2[2] = first.k;
    sol2[3] = second.i;
    sol2[4] = second.j;
    sol2[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();
  for(int i=0; i < 6; i++){
    printf("%d ", sol2[i]);
  }
  
  fclose(in);
  fclose(out);
  return 0;
}