Cod sursa(job #531102)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 8 februarie 2011 21:53:34
Problema Loto Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

int n,s,v[101],d[1000001],ind[1000001];

inline int cmp(int i, int j)
{
    return d[i]<d[j];
}

int main()
{
    int i,j,k,l,r,aux,a,b,c;
    freopen("loto.in","r",stdin);
    freopen("loto.out","w",stdout);
    scanf("%d%d",&n,&s);
    for (i=1;i<=n;++i)
        scanf("%d",&v[i]);
    for (i=1;i<=n;++i)
        for (j=1;j<=n;++j)
            for (k=1;k<=n;++k)
            {
                d[(i-1)*n*n+(j-1)*n+k-1]=v[i]+v[j]+v[k];
                ind[(i-1)*n*n+(j-1)*n+k-1]=(i-1)*n*n+(j-1)*n+k-1;
            }
    sort(ind,ind+n*n*n,cmp);
    l=0;r=n*n*n-1;
    while ((l<r)&&(d[ind[l]]+d[ind[r]]!=s))
        if (d[ind[l]]+d[ind[r]]>s) --r;
        else ++l;
    if (d[ind[l]]+d[ind[r]]!=s) printf("-1");
    else
    {
        aux=ind[l];
        a=(ind[l]%n)+1;
        b=(ind[l]/n)%n+1;
        c=ind[l]/(n*n)+1;
        printf("%d %d %d ",v[a],v[b],v[c]);
        aux=ind[r];
        a=(ind[r]%n)+1;
        b=(ind[r]/n)%n+1;
        c=ind[r]/(n*n)+1;
        printf("%d %d %d ",v[a],v[b],v[c]);
    }
    return 0;
}