Cod sursa(job #1333068)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 2 februarie 2015 19:00:02
Problema Loto Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <stdio.h>
#include <algorithm>
struct str
{
    int p1;
    int p2;
    int p3;
    int val;
} a[1000001];
int n;
int comp(str a,str b)
{
    return a.val<b.val;
}
int main()
{
    int s;
    freopen ("loto.in","r",stdin);
    freopen ("loto.out","w",stdout);
    scanf("%d%d",&n,&s);
    int b[101];
    int pos=1;
    for(int i=1;i<=n;i++) scanf("%d",&b[i]);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            for(int k=1;k<=n;k++)
            {
                a[pos].p1=i;
                a[pos].p2=j;
                a[pos].p3=k;
                a[pos].val=b[k]+b[j]+b[i];
                //printf("%d ",a[pos].val);
                pos++;
            }
        }
    }
    bool as=0;
    std::sort(a+1,a+pos,comp);
    for(int i=1;i<pos;i++)
    {
        int valor=s-a[i].val;
        int beg=1,e=pos-1,mij;
        while(beg<=e)
        {
            mij=(beg+e)/2;
            if(a[mij].val==valor)
            {
                printf("%d %d %d %d %d %d\n",b[a[i].p1],b[a[i].p2],b[a[i].p3],b[a[mij].p1],b[a[mij].p2],b[a[mij].p3]);
                as=1;
                break;
            }
            else if(a[mij].val<valor) beg=mij+1;
            else if(a[mij].val>valor) e=mij-1;
        }
        if(as==1) break;
    }
    //printf("%d\n",as);
    if(as==0) printf("-1");
}