Cod sursa(job #2658666)

Utilizator AlexNicuNicu Alexandru AlexNicu Data 14 octombrie 2020 18:03:23
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.73 kb
#include <fstream>
#include <stdio.h>
#include <vector>

using namespace std;
ifstream cin ( "loto.in" );
ofstream cout ( "loto.out" );
struct sume {
   int a, b, c, s;
};
#define NMAX 100
#define MOD 666013
int v[NMAX];
vector <sume> myHash[MOD];
void adauga ( int a, int b, int c, int s ) {
   int cod = s % MOD, i = 0;
   while ( i < myHash[cod].size() && s != myHash[cod][i].s )
    i++;
   if ( i == myHash[cod].size() )
    myHash[cod].push_back({a, b, c, s});
}
int cauta ( int s ) {
  int cod = s % MOD, i = 0;
  while ( i < myHash[cod].size() && s != myHash[cod][i].s )
    i++;
  if ( i == myHash[cod].size() )
    return -1;
  return i;
}
int main()
{
    int n, i, j, k, sum, ans1, ans2, ans3, ans4, ans5, ans6, ok, p;
    cin >> n >> p;
    for ( i = 1; i <= n; i++ )
      cin >> v[i];
    ok = -1;
    i = j = k = 1;
    while ( ok == -1 && i <= n ) {
        j = i;
        while ( ok == -1 && j <= n ) {
           k = j;
           while ( ok == -1 && k <= n ) {
             sum = v[i] + v[j] + v[k];
             adauga(v[i], v[j], v[k], sum );
             if ( p - sum >= 0 ) {
                ok = cauta(p - sum);
                if ( ok != -1 ) {
                  ans1 = v[i];
                  ans2 = v[j];
                  ans3 = v[k];
                  ans4 = myHash[( p - sum ) % MOD][ok].a;
                  ans5 = myHash[( p - sum ) % MOD][ok].b;
                  ans6 = myHash[( p - sum ) % MOD][ok].c;
                }
             }
             k++;
           }
           j++;
        }
        i++;
    }
    if ( ok == -1 )
      cout << "-1";
    else
      cout << ans1 << " " << ans2 << " " << ans3 << " " << ans4 << " " << ans5 << " " << ans6;
    return 0;
}