Cod sursa(job #1207871)

Utilizator borcanirobertBorcani Robert borcanirobert Data 14 iulie 2014 10:42:52
Problema Loto Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>
#include <algorithm>
using namespace std;

ifstream fin("loto.in");
ofstream fout("loto.out");

const int MAXA = 110;
struct IJK{
    int s, i, j, k;
};
int n, nr, s, su;
int a[MAXA];
int sum;
int d, mij;
IJK v[1000009];
bool ok = true;

bool Comp( const IJK& n1, const IJK& n2 )
{
    return n1.s < n2.s;
}

int main()
{
    int i, j, k;

    fin >> n >> sum;
    for( i = 1; i <= n; i++) fin >> a[i];

    for( i = 1; i <= n; i++ )
    {
        for( j = i; j <= n; j++ )
        {
            for( k = j; k <= n; k++ )
            {
                v[++nr].s = a[i] + a[j] + a[k];
                v[nr].i = a[i];
                v[nr].j = a[j];
                v[nr].k = a[k];
            }
        }
    }

    sort( v + 1, v + 1 + nr, Comp );

    for ( i = 1; i <= n && ok; i++ )
    {
        su = sum - v[i].s;

        s = 1; d = nr;

        while ( s <= d && ok )
        {
            mij = ( s + d ) / 2;

            if ( su == v[mij].s )
            {
                fout << v[i].i << ' ' << v[i].j << ' ' << v[i].k << ' ';
                fout << v[mij].i << ' ' << v[mij].j << ' ' << v[mij].k << '\n';
                ok = false;
            }
            if ( su > v[mij].s ) s = mij + 1;
            if ( su < v[mij].s ) d = mij - 1;
        }
    }

    if ( ok )
        fout << "-1" << '\n';

    fin.close();
    fout.close();
    return 0;
}