Cod sursa(job #1528969)

Utilizator OlivianOlivian Dan Cretu Olivian Data 20 noiembrie 2015 12:20:00
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#include<cstdio>
#include <algorithm>

using namespace std;

struct numere{
    int x,y,z,s1;
};

numere s[1000003];

bool comp(numere A, numere B)
{
    if(A.s1<B.s1)
        return 1;
    else return 0;
}
int n,suma,a[102],p=1,st=1,dr,s2,poz1=0,poz2=0,mijloc,v[8],i,j,z,ok=0;
int main()
{
    p=0;
    freopen("loto.in","r",stdin);
    freopen("loto.out","w",stdout);
    scanf("%d %d ",&n,&suma);
    for (i=1;i<=n;i++)
        scanf("%d ",&a[i]);
    sort(a+1, a+n+1);
    for (i=1;i<=n;i++)
        for (j=i;j<=n;j++)
            for (z=j;z<=n;z++){
                p++;
                s[p].x=a[i];
                s[p].y=a[j];
                s[p].z=a[z];
                s[p].s1=a[i]+a[j]+a[z];

            }
    sort (s+1,s+p+1,comp);
    //p--;
    //dr=p;
    for(i=1; i<=p; i++)
    {
        st=1;
        dr=p;
        s2=suma-s[i].s1;
        poz1=i;

        while (st<=dr){
            mijloc=(st+dr)/2;
            if(s[mijloc].s1==s2)
            {
                poz2=mijloc;
                ok=1;
                break;
            }
            if(s[mijloc].s1>s2)
                dr=mijloc-1;
            if(s[mijloc].s1<s2)
                st=mijloc+1;

        }
        if(ok==1)
            break;
    }
    if (ok==1){
        v[1]=s[poz1].x;
        v[2]=s[poz1].y;
        v[3]=s[poz1].z;
        v[4]=s[poz2].x;
        v[5]=s[poz2].y;
        v[6]=s[poz2].z;
        sort (v+1,v+7);
        for (i=1;i<7;i++)
            printf("%d ",v[i]);
    }
    else
        printf("-1");
    return 0;
}