Cod sursa(job #735973)

Utilizator Theorytheo .c Theory Data 17 aprilie 2012 16:55:03
Problema Loto Scor 55
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.65 kb
#include<fstream>
#include<algorithm>
#include<vector>
#define n1 102
#define n2 10002
#define n3 1000005
using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");
struct ob
{
    int w;int e;int r;int t;};
    ob b[n3];


int i, j, v[n1], a[3][n2] , n, S, k, Nr, poz ,ok =0;
int sol[7];
int bs(int x)
{
    int  p =1, u = Nr;
    int m;
    while( p <= u)
    {
        m = ( p+ u )/2;
        if(x >= b[m].w)

            p = m + 1;

        else
            u = m - 1;
    }
    m = (p + u)/2;
    if(x<b[m].w)
        --m;
    if(x==b[m].w)
        return m;
        return 0;
}
bool cmp (ob a, ob q)
{
    if(a.w>q.w)
        return 0;
    return 1;
}
void read()
{
    int l;
    fin >>n >>S;
    for(i = 1 ;i <= n; i++)
        fin>> v[i];
        sort(v + 1, v+ n + 1);
    for(i =1; i <= n ;i++)
    {

        for(j = i ; j <= n; j++)
        {
            for( l = j ; l <= n; l++)
            {


                b[++Nr].w = v[i] + v[j] + v[l];
                b[Nr].e = v[i];
                b[Nr].r = v[j];
                b[Nr].t = v[l];
            }
        }
    }
    sort(b + 1 ,b + 1 +Nr,cmp);
     //for(i = 1 ;i <= Nr; i++)
     //   fout << b[0][i]<<" ";

    for(i = 1 ;i <= Nr; i++)
    {
        poz =  bs(S - b[i].w);

        if( poz)
        {

           fout<< b[i].e <<" " <<b[i].r <<" "<<b[i].t ;
           fout<<" " << b[poz].e <<" " <<b[poz].r <<" " <<b[poz].t;

            ok = 1;
            break;
        }
    }


    if(!ok)
    fout << -1;




}
int main()
{
    read();
    fin.close();
    fout.close();
    return 0;

}