Cod sursa(job #2672347)

Utilizator teodorescunicolasteodorescu nicolas alexandru teodorescunicolas Data 13 noiembrie 2020 18:33:29
Problema Loto Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.34 kb
#include <stdio.h>
#include <vector>
#define MOD 10007

using namespace std;

int v[100], variab[6];

vector<int> myHash[10007];

bool cauta( int x ) {
    int cod = x % MOD;
    unsigned int i = 0;
    while ( i < myHash[cod].size() && myHash[cod][i] != x )
        i++;
    return i < myHash[cod].size();
}

void adauga( int x ) {
    int cod = x % MOD;
    unsigned int i = 0;
    while ( i < myHash[cod].size() && myHash[cod][i] != x)
        i++;
    if ( i == myHash[cod].size() )
        myHash[cod].push_back( x );
}

void sterge( int x ) {
    int cod = x % MOD;
    unsigned int i = 0;
    while ( i < myHash[cod].size() && myHash[cod][i] != x )
        i++;
    if ( i < myHash[cod].size() )
        myHash[cod].erase( myHash[cod].begin() + i );
}

int main() {
    FILE *fin, *fout;
    int n, s, i, j, k, x, y, z, ok;
    fin = fopen( "loto.in", "r" );
    fout = fopen( "loto.out", "w" );
    fscanf( fin, "%d%d", &n, &s );
    for ( i = 0; i < n; i++ ) {
        fscanf( fin, "%d", &v[i] );
    }
    for ( i = 0; i < n; i++ ) {
        for ( j = i; j < n; j++ ) {
            for ( k = j; k < n; k++ ) {
                adauga( v[i] + v[j] + v[k] );
            }
        }
    }
    ok = 0;
    for ( i = 0; i < n; i++ ) {
        for ( j = i; j < n; j++ ) {
            for ( k = j; k < n; k++ ) {
                if ( cauta( s - (v[i] + v[j] + v[k]) ) == 1 ) {
                    ok = 1;
                    variab[0] = v[i];
                    variab[1] = v[j];
                    variab[2] = v[k];
                    for ( x = 0; x < n; x++ ) {
                        for ( y = x; y < n; y++ ) {
                            for ( z = y; z < n; z++ ) {
                                if ( s - (v[i] + v[j] + v[k]) == v[x] + v[y] + v[z] ) {
                                    variab[3] = v[x];
                                    variab[4] = v[y];
                                    variab[5] = v[z];
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    if ( ok == 1 ) {
        for ( i = 0; i < 6; i++ ) {
            fprintf( fout, "%d ", variab[i] );
        }
    } else {
        fprintf( fout, "-1" );
    }
    fclose( fin );
    fclose( fout );
    return 0;
}