Cod sursa(job #2661801)

Utilizator LucaMihaiLM10Luca Ilie LucaMihaiLM10 Data 22 octombrie 2020 18:52:49
Problema Loto Scor 50
Compilator cpp-64 Status done
Runda Temă vectori frecvență & hashing clasa a 9-a Marime 1.57 kb
#include <stdio.h>
#include <vector>
#define NMAX 100
#define MOD 666013
using namespace std;
int v[NMAX];
struct per {
    int a, b, c, suma;
};
vector<per> myHash[MOD];
int cauta( int x ) {
    int n, cod, i;
    cod = x % MOD;
    n = myHash[cod].size();
    i = 0;
    while ( i < n && myHash[cod][i].suma != x )
        i++;
    if ( i == n )
        i = -1;
    return i;
}
void adauga( int x, int y, int z, int s ) {
    int n, cod, i;
    cod = s % MOD;
    n = myHash[cod].size();
    i = 0;
    while ( i < n && myHash[cod][i].suma != s )
        i++;
    if ( i == n )
        myHash[cod].push_back( {x, y, z, s} );
}
int main() {
    FILE *fin, *fout;
    int n, s, sum, p, i, j, k;
    fin = fopen( "loto.in", "r" );
    fscanf( fin, "%d%d", &n, &s );
    for ( i = 0; i < n; i++ )
        fscanf( fin, "%d", &v[i] );
    fclose( fin );
    p = -1;
    i = 0;
    fout = fopen( "loto.out", "w" );
    while ( i < n && p == -1 ) {
        j = 0;
        while ( j < n && p == -1 ) {
            k = 0;
            while ( k < n && p == -1 ) {
                sum = v[i] + v[j] + v[k];
                adauga( v[i], v[j], v[k], sum );
                p = cauta( s - sum );
                if ( p != -1 )
                    fprintf( fout, "%d %d %d %d %d %d", v[i], v[j], v[k], myHash[(s - sum) % MOD][p].a, myHash[(s - sum) % MOD][p].b, myHash[(s - sum) % MOD][p].c );
                k++;
            }
            j++;
        }
        i++;
    }
    if ( p == -1 )
        fprintf( fout, "-1" );
    fclose( fout );
    return 0;
}