Cod sursa(job #1434878)

Utilizator czlateaZlatea Cezar czlatea Data 11 mai 2015 16:41:59
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <cstdio>
#include <algorithm>
using namespace std;

struct LOTO
{
  int suma ;
  char i1 , i2 , i3 ;
} ;
LOTO v [1000001] ;
int n ;
int d [102] ;
int i , j , k , med ;
int  s ;
bool ceva ( LOTO a, LOTO b)
{
   return a.suma < b.suma;
}
int main()
{

    freopen ( "loto.in" , "r" , stdin ) ;
    freopen ( "loto.out" , "w" , stdout ) ;
    scanf ( "%d" , &n ) ;
   scanf ( "%d" , &s ) ;
   for ( i = 1 ; i <= n ; i++ )
   {
      scanf ( "%d" , &d [i] ) ;
   }
    register int  s1 , st , dr , found , l ;
    l = 0;
    for ( i = 1 ; i <= n ; i++ )

      for ( j = 1 ; j <= n ; j++ )

         for ( k = 1; k <= n ; k++ )
         {
            v[l].i1 = d[i] ;
            v[l].i2 = d[j] ;
            v[l].i3 = d[k] ;
            v[l].suma = d[i] + d[j] + d[k] ;
			l++;
         }
      sort ( v + 1 , v + l + 1 , ceva ) ;
    for ( i = 1 ; i <= n ; i++ )

      for ( j = 1 ; j <= n ; j++ )

         for ( k = 1; k <= n ; k++ )
         {
            s1 = s - ( d[i] + d[j] + d[k] ) ;
            st = 1 ;
            dr = l ;
            found = -1 ;
            while( st <= dr )
            {
               med = (st+dr)/2 ;
               if ( v[med].suma == s1 )
                {
                   found = 0 ;
               printf ( "%d %d %d %d %d %d\n" , d[i] , d[j] , d[k] , v[med].i1 , v[med].i2 , v[med].i3 ) ;
                   return 0;
                }else
                if(v[med].suma < s1)
                st = med + 1; else dr = med - 1;
            }
         }
      printf ( "-1\n" ) ;
    return 0;
}