Cod sursa(job #196035)

Utilizator DraStiKDragos Oprica DraStiK Data 24 iunie 2008 09:15:13
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <stdio.h>
#include<stdlib.h>
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]); 
}
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];
            }
}
void sort ()
{
    int i,ok,aux;
    do
    {
        ok=1;
        for (i=1; i<=u; ++i)
            if (a[i]>a[i+1])
            {
                ok=0;
                aux=a[i];
                a[i]=a[i+1];
                a[i+1]=aux;
            }
            
    }
    while (!ok);
}
int cbin (int val)
{
    int in,sf,m;
    in=1;
    sf=u;
    while (in<=sf)
    {
        m=(in+sf)/2;
        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);
}
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 ();
    solve_2 ();
    printf ("-1");
    return 0;
}