Pagini recente » Diferente pentru home intre reviziile 902 si 219 | Rating Lefter Andrei (andlft) | Cod sursa (job #1991574) | Clasament dupa rating | Cod sursa (job #1452912)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");
int v[150],i,j,n,m,s,ans[ 10 ],myFinalSum;
bool stop = false,nothing;
bool Solve( int niv, int sum, int ls, int ld )
{
int lmij;
int mij = ( ls + ld ) / 2;
int mySum;
bool rip = true;
while( rip )
{
if( ls == ld )
rip = false;
mij = ( ls + ld ) / 2;
if( stop )
break;
ans[ niv ] = v[ mij ];
mySum = sum + ans[ niv ];
if( niv == 6 )
{
myFinalSum = mySum;
if( mySum < s )
ls = mij + 1;
else
ld = mij - 1;
if( mySum == s )
{
stop = true;
break;
}
}
else
{
if( Solve( niv + 1 , mySum , 1 , n ) )
{
ls = mij + 1;
}
else
{
ld = mij;
}
}
if( lmij == mij )
{
ls = ld;
}
lmij = mij;
}
mij = ( ls + ld ) / 2;
if( niv == 6 )
{
if( sum + v[ mij ] == s )
{
stop = true;
ans[ niv ] = v[ mij ];
}
}
if( stop )
{
fout<<ans[ niv ]<<' ';
return true;
}
if( myFinalSum < s )
return true;
else
return false;
}
int main()
{
fin>>n>>s;
for( i = 1 ; i <= n ; ++i )
{
fin>>v[ i ];
}
sort( v + 1 , v + 1 + n );
nothing = Solve( 1 , 0 , 1 , n );
if( !stop )
fout<<"-1";
return 0;
}