Cod sursa(job #849144)

Utilizator Athena99Anghel Anca Athena99 Data 6 ianuarie 2013 16:18:04
Problema Loto Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <cassert>
#include <cstdio>

int d[1000005][4],v[105];

int main()
{
    int n=0,s=0,i=0,j=0,k=0,m=0,min=0,poz=0,x=0,st=0,dr=0;

    assert(freopen("loto.in","r",stdin));
    assert(freopen("loto.out","w",stdout));

    assert(scanf("%d%d",&n,&s));
    for (i=0; i<n; ++i)
        assert(scanf("%d",&v[i]));

    for (i=0; i<n; ++i)
        for (j=0; j<n; ++j)
            for (k=0; k<n; ++k)
            {
                d[m][0]=v[i]+v[j]+v[k];
                d[m][1]=v[i];
                d[m][2]=v[j];
                d[m][3]=v[k];
                ++m;
            }

    for (i=0; i<n*n*n; ++i)
    {
        min=d[i][0];
        poz=i;
        for (j=i+1; j<n*n*n; ++j)
            if (d[j][0]<min)
            {
                min=d[j][0];
                poz=j;
            }

        if (poz>i)
        {
            x=d[i][0];d[i][0]=d[poz][0];d[poz][0]=x;
            x=d[i][1];d[i][1]=d[poz][1];d[poz][1]=x;
            x=d[i][2];d[i][2]=d[poz][2];d[poz][2]=x;
            x=d[i][3];d[i][3]=d[poz][3];d[poz][3]=x;
        }
    }

    st=0;
    dr=n*n*n-1;
    while (st<=dr)
    {
        if (d[st][0]+d[dr][0]==s)
            break;

        if (d[dr][0]+d[dr][0]<s || d[st][0]+d[st][0]>s)
        {
            st=dr+1;
            break;
        }

        if (d[st][0]+d[dr][0]<s)
            ++st;
        else
            --dr;
    }

    if (st<=dr)
        assert(printf("%d %d %d %d %d %d\n",d[st][1],d[st][2],d[st][3],d[dr][1],d[dr][2],d[dr][3]));
    else
        assert(printf("-1\n"));

    return 0;
}