Cod sursa(job #871932)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 5 februarie 2013 16:11:13
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.87 kb
#include<stdio.h>
#include<vector>
#define MOD 666013
using namespace std ;
vector < int > h [ 666017 ] ;
int n , s , sum , val2 ;
int a [ 107 ] ;
bool cb ( long x , long ind )
{
    for ( int i = 0 ; i != h [ ind ] . size ( ) ; ++ i )
        if ( h [ ind ] [ i ] == x )
            return 1 ;
    return 0 ;
}
int main ( )
{
    freopen ( "loto.in" , "r" , stdin ) ;
    freopen ( "loto.out" , "w" , stdout ) ;
    scanf ( "%d %d" , &n , &s ) ;
    for ( int i = 1 ; i <= n ; ++ i )
        scanf ( "%d" , &a [ i ] ) ;
    for ( int i = 1 ; i <= n ; ++ i )
        for ( int j = i ; j <= n ; ++ j )
            for ( int k = j ; k <= n ; ++ k )
                h [ ( a [ i ] + a [ j ] + a [ k ] ) % 666013 ] . push_back ( a [ i ] + a [ j ] + a [ k ] ) ;
    for ( int i = 1 ; i <= n ; ++ i )
        for ( int j = i ; j <= n ; ++ j )
            for ( int k = j ; k <= n ; ++ k )
            {
                sum = a [ i ] + a [ j ] + a [ k ] ;
                if ( s - sum >= 0 )
                {
                    int val3 = 0 , val2 = ( s - sum ) % MOD ;
                    bool ok ;
                    val3 = cb ( s-sum , val2 ) ;
                    if ( val3 == 1 )
                    {
                        ok = 0 ;
                        for ( int i1 = 1 ; i1 <= n && ok == 0  ; ++ i1 )
                            for ( int j1 = i1 ; j1 <= n && ok == 0 ; ++ j1 )
                                for ( int k1 = j1 ; k1 <= n && ok == 0 ; ++ k1 )
                                    if ( a [ i1 ] + a [ j1 ] + a [ k1 ] == s - sum )
                                        printf ( "%d %d %d " , a [ i1 ] , a [ j1 ] , a [ k1 ] ) , ok = 1 ;
                        printf ( "%d %d %d\n" ,  a [ i ] , a [ j ] , a [ k ] ) ;
                        return 0 ;
                    }
                }
            }
    printf ( "-1" ) ;
    return 0 ;
}