Cod sursa(job #2657413)

Utilizator Asgari_ArminArmin Asgari Asgari_Armin Data 10 octombrie 2020 15:19:26
Problema Loto Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <stdio.h>
#include <vector>

using namespace std;

const int NMAX = 100;
const int MOD = 666013;

struct ura{
  int x, y, z, sum;
};
int v[NMAX + 1];
vector <ura> myhash[MOD];

void add_hash( int a, int b, int c, int suma ){
  int i = 0, code = suma % MOD;
  while( i < myhash[code].size() && suma != myhash[code][i].sum )
    ++i;
  if( i == myhash[code].size() )
    myhash[code].push_back({a, b, c, suma});
}

int search_hash( int suma ){
  int i = 0, code = suma % MOD;
  while( i < myhash[code].size() && suma != myhash[code][i].sum )
    ++i;
  return (i < myhash[code].size()) ? i : -1;
}


int main(){
  int n, k, i, j, o, gasit, v1, v2, v3, v4, v5, v6, suma;
  FILE *fin, *fout;
  fin = fopen( "loto.in", "r" );
  fout = fopen( "loto.out", "w" );
  fscanf( fin, "%d%d", &n, &k );
  for( i = 0; i < n; ++i )
    fscanf( fin, "%d", &v[i] );
  gasit = -1;
  for( i = 0; i < n && gasit < 0; ++i )
    for( j = i; j < n && gasit < 0; ++j )
      for( o = j; o < n && gasit < 0; ++o ){
        add_hash(v[i], v[j], v[o], suma = (v[i] + v[j] + v[o]));
        gasit = search_hash(k - suma);
        if( gasit >= 0 ){
            v1 = v[i]; v2 = v[j]; v3 = v[o];
           // v4 = myhash[(k - suma) % MOD][gasit].x; v5 = myhash[(k - suma) % MOD][gasit].y; v6 = myhash[(k - suma) % MOD][gasit].z;
        }
      }
  if( gasit < 0 )
    fprintf( fout, "-1" );
  else
    fprintf( fout, "%d %d %d %d %d %d", v1, v2, v3, v4, v5, v6 );
  fclose( fin );
  fclose( fout );
  return 0;
}