Cod sursa(job #1082152)

Utilizator denisx304Visan Denis denisx304 Data 14 ianuarie 2014 11:22:30
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *f,*g;
struct suma
{
    int s;
    int a,b,c;
};
int v[105],i,j,s,n,k,x,nr,st,dr,m,caut;
suma t[1000005];

int cmp (suma x, suma y)
{
    if (x.s < y.s)
        return 1;
    return 0;
}

int main ()
{
    f=fopen("loto.in","r");
    g=fopen("loto.out","w");
    fscanf(f,"%d%d",&n,&s);
    for (i = 1; i <= n; i++)
        fscanf(f,"%d",&v[i]);
    for (i = 1; i <= n; i++)
        for (j = i; j<= n; j++)
            for (k = j; k <= n; k++)
            {
                t[++nr].s = v[i] + v[j] + v[k];
                t[nr].a = v[i];
                t[nr].b = v[j];
                t[nr].c = v[k];
            }
    sort (t + 1, t + nr + 1, cmp);
    k = 0;
    for (i = 1; i <= nr && k == 0; i++)
    {
        caut = s - t[i].s;
        st = 1;
        dr = nr;
        while(st <= dr && k == 0)
        {
            m = (st + dr) / 2;
            if(t[m].s == caut)
            {
                fprintf(g,"%d %d %d %d %d %d",t[m].a,t[m].b,t[m].c,t[i].a,t[i].b,t[i].c);
                k = 1;
                break;
            }
            else
            {
                if(t[m].s < caut)
                    st = m + 1;
                else
                    dr = m - 1;
            }
        }
    }
    if (k == 0) fprintf(g,"-1");
    fclose(f);
    fclose(g);
    return 0;
}