Cod sursa(job #1452912)

Utilizator DysKodeTurturica Razvan DysKode Data 22 iunie 2015 12:09:44
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.74 kb
#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;
}