Cod sursa(job #1707819)

Utilizator Tiberiu02Tiberiu Musat Tiberiu02 Data 25 mai 2016 22:12:11
Problema Loto Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
# include <stdio.h>
# include <stdlib.h>

# include <algorithm>

# define MAX_N 101
# define infinit 100000001

int v[MAX_N];

struct pereche {
    unsigned char a, b, c;
} p[MAX_N * MAX_N * MAX_N];

int s( struct pereche a ) {
    return v[a.a] + v[a.b] + v[a.c];
}

int cmp( struct pereche a, struct pereche b ) {
    return s( a ) <= s( b );
}

int main() {
    FILE *fin = fopen( "loto.in", "r" ), *fout = fopen( "loto.out", "w" );

    int n, i, j, k, m, S;

    fscanf( fin, "%d%d", &n, &S );

    m = 1;
    for ( i = 1; i <= n; i ++ ) {
        fscanf( fin, "%d", &v[i] );

        for ( j = 1; j <= n; j ++ )
            for ( k = 1; k <= n; k ++ ) {
                p[m].a = i;
                p[m].b = j;
                p[m].c = k;

                m ++;
            }
    }

    v[0] = infinit;

    std::sort( p + 1, p + m, cmp );

//    for ( i = 1; i < m; i ++ )
//        printf( "%d ", s( p[i] ) );

    j = m;
    i = 1;
    do {
        while ( j > 0 && s( p[i] ) + s( p[j] ) > S )
            j --;
        if ( s( p[i] ) + s( p[j] ) != S )
            i ++;
    } while ( i <= j && s( p[i] ) + s( p[j] ) != S );

    if ( i <= j )
        fprintf( fout, "%d %d %d %d %d %d", v[p[i].a], v[p[i].b], v[p[i].c], v[p[j].a], v[p[j].b], v[p[j].c] );
    else
        fprintf( fout, "-1" );

    fclose( fin );
    fclose( fout );

    return 0;
}