Cod sursa(job #1189159)

Utilizator heracleRadu Muntean heracle Data 21 mai 2014 17:10:50
Problema Loto Scor 100
Compilator cpp Status done
Runda lab10d22mai2014 Marime 1.84 kb
#include <cstdio>
#include <algorithm>
#include <cstdlib>

FILE* in;
FILE* out;

const int Q=101,W=171750;

int v[Q];

int n,s;

struct chestie{
    int val;
    int nr[4];
} a[W];
int srt[W];

int nxt;

void inline find(int p)
{
    int x=s-a[srt[p]].val;

    int i=1<<19;

    int t=0;

    while(i)
    {
        if(i+t<=nxt)
        {
            if(a[srt[t+i]].val<x)
                t+=i;
            else if (a[srt[t+i]].val==x)
            {
                t+=i;
                break;
            }
        }
        i/=2;
    }

    if(a[srt[t]].val==x)
    {
        fprintf(out,"%d %d %d %d %d %d",a[srt[p]].nr[1],a[srt[p]].nr[2],a[srt[p]].nr[3],a[srt[t]].nr[1],a[srt[t]].nr[2],a[srt[t]].nr[3] );
        exit(0);
    }

}

void gaseste_rez()
{
    int act=1,s2=s/2;

    while( a[srt[act]].val < s2 )
        act++;

    for(;act<=nxt; act++)
    {
        if(a[srt[act]].val == a[srt[act-1]].val )
            continue;

        find(act);
    }
    fprintf(out,"-1");
}

int act[4],sum;

void make_sumde3(int pas)
{

    for(int i=1; i<=n; i++)
        for(int j=i; j<=n; j++)
            for(int k=j; k<=n; k++)
    {
        a[++nxt].val=v[i]+v[j]+v[k];
        a[nxt].nr[1]=v[i];
        a[nxt].nr[2]=v[j];
        a[nxt].nr[3]=v[k];
        srt[nxt]=nxt;
    }
}

bool cmp (int x, int y)
{
    return a[x].val<a[y].val;
}

int main()
{
    in=fopen("loto.in","r");
    out=fopen("loto.out","w");

    fscanf(in,"%d%d",&n,&s);

    for(int i=1; i<=n; i++)
    {
        fscanf(in,"%d",&v[i]);
       // fprintf(out,"%d ",i);
    }

    make_sumde3(1);

    std::sort(srt+1,srt+nxt+1,cmp);

    while(a[srt[nxt]].val>s)
        nxt--;

   // for(int i=1; i<=nxt; i++)
    //    fprintf(out,"%d\n",a[srt[i] ].val);

    gaseste_rez();

    return 0;
}