Cod sursa(job #1401544)

Utilizator akaprosAna Kapros akapros Data 25 martie 2015 22:49:59
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include<cstdio>
#include<algorithm>
#include<cstring>
#define Nmax 105
using namespace std;
int n,i,j,s,nrs,p,v[Nmax],k;
struct nod
{
    int a;
    int x;
    int y;
    int z;
} sum[Nmax*Nmax*Nmax];
int cmp(const nod A,const nod B)
{
    return A.a<B.a;
}
int cb(int x)
{
    int st=1,dr=nrs,mij=0;
    while (st<=dr)
    {
        mij=(st+dr)/2;
        if (sum[mij].a==x) return mij;
        if (sum[mij].a<=x && (sum[mij+1].a>x || mij==nrs)) return mij;
        if (sum[mij].a<x) st=mij+1;
        else dr=mij-1;
    }
    return 0;
}
int main()
{
    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]);
    if (s<=v[1]*6 || s>v[n]*6)
    {
        printf("-1");
        return 0;
    }
    for (i=1;i<=n;i++)
    for (j=1;j<=n;j++)
    for (k=1;k<=n;k++)
    {
        sum[++nrs].a=v[i]+v[j]+v[k];
        sum[nrs].x=i;
        sum[nrs].y=j;
        sum[nrs].z=k;
    }
    sort(sum+1,sum+nrs+1,cmp);
    for (i=1;i<=n;i++)
    for (j=1;j<=n;j++)
    for (k=1;k<=n;k++)
    {
        p=cb(s-(v[i]+v[j]+v[k]));
        if (sum[p].a==s-(v[i]+v[j]+v[k]) )
        {printf("%d %d %d %d %d %d",v[i],v[j],v[k]
        ,v[sum[p].x],v[sum[p].y],v[sum[p].z]);
        return 0;  }
    }
    printf("-1") ;
    return 0;
}