Cod sursa(job #238443)

Utilizator DraStiKDragos Oprica DraStiK Data 2 ianuarie 2009 10:41:39
Problema Loto Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <stdio.h>
#include<stdlib.h>
#include <algorithm>
using namespace std;
struct triplu
{
    int a,b,c,sm;
};
int n,s,u;
int a[105];
triplu t[105*105*105];
void read ()
{
    int i;
    scanf ("%d%d",&n,&s);   
    for (i=1; i<=n; ++i)
        scanf ("%d",&a[i]); 
    fclose(stdin);
}
void solve ()
{
    int i,j,k;
    for (i=1; i<=n; ++i)
        for (j=1; j<=n; ++j)
            for (k=1; k<=n; ++k)
            {
                t[++u].a=a[i];
                t[u].b=a[j];
                t[u].c=a[k];
                t[u].sm=a[i]+a[j]+a[k];
            }
}
int cbin (int val)
{
    int in,sf,m;
    in=1;
    sf=u;
    while (in<=sf)
    {
        m=(in+sf)>>1;
        if (t[m].sm==val)
            return m;
        else
        {
            if(t[m].sm<val) 
                in=m+1;
            if(t[m].sm>val) 
                sf=m-1;
        }
    }
    return 0;
}
void print (int i,int j)
{
    printf("%d %d %d %d %d %d",t[i].a,t[i].b,t[i].c,t[j].a,t[j].b,t[j].c);
    fclose(stdout);
}
int cond (const triplu a,const triplu b)
{
    return a.sm<b.sm;
}
void solve_2 ()
{
    int i,poz;
    for (i=1; i<=u; ++i)
    {
        poz=cbin (s-t[i].sm);
        if (poz)
        {
            print (i,poz);
            exit (0);
        }
    }
}
int main ()
{
    freopen ("loto.in","r",stdin);
    freopen ("loto.out","w",stdout);
    read ();
    solve ();
    sort (t+1,t+u+1,cond);
    solve_2 ();
    printf ("-1");
    return 0;
}