Cod sursa(job #854440)

Utilizator bogdan93Grigorescu Bogdan bogdan93 Data 13 ianuarie 2013 16:43:02
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <cstdlib>
#include <cstdio>
#include <vector>

#define M 666013

using namespace std;

struct sumede3
{
    int suma , t1 , t2 , t3 ;
};

int v[101],S ;
vector<sumede3> hash[M] ;

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

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

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

    for ( int i = 1 ; i <= n ; i++ )
        for ( int j = i ; j <= n ; j++ )
            for (int k = j ; k <= n ; k++ )
            {
                int r , s = v [ i ] + v [ j ] + v [ k ] ;
                if (s >= S) continue ;
                r = s % M ;
                sumede3 x ;
                x.suma = s ;
                x.t1 = v [ i ] ;
                x.t2 = v [ j ] ;
                x.t3 = v [ k ] ;
                hash [ r ].push_back ( x ) ;

            }
    int ok = 0;
    for ( int  i = 1 ; i <= n ; i++ )
        for ( int  j = i ; j <= n; j++ )
            for ( int k = j ; k <= n ; k++ )
            {
                int scaut , r , s = v [ i ] + v [ j ] + v [ k ] ;

                scaut = S - s;
                if ( scaut  <= 0 ) continue ;
                r = scaut % M ;
                for ( int it = 0 ; it < hash [ r ].size() ; it++ )
                    if ( scaut == hash [ r ][ it ].suma )
                        {
                            fprintf ( fout , "%d %d %d " , v [ i ] ,v [ j ] , v [ k ] ) ;
                            fprintf ( fout , "%d %d %d\n" , hash [ r ][ it ].t1 , hash [ r ][ it ].t2 , hash [ r ][ it ].t3 ) ;
                            ok = 1 ; goto here ;
                        }





            }

    here:
    if ( !ok ) fprintf ( fout , "-1" ) ;
    return 0;
}