Cod sursa(job #646774)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 11 decembrie 2011 11:47:16
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<cstdio>
#include<algorithm>
using namespace std;
#define N 1000001
typedef struct S
{int x,y,z,t;};
int n,i,j,k,m,s,v[101],e,o,a,b,p,l,q,w,u[7];
S r[N];

int cmp(S a,S b)
{return a.t<b.t;}

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]);
p=s,sort(v+1,v+n+1);
for(i=1;i<=n;i++)
for(j=i;j<=n;j++)
for(k=j;k<=n;k++)
     r[++e].t=v[i]+v[j]+v[k],r[e].x=v[i],r[e].y=v[j],r[e].z=v[k];
sort(r+1,r+e+1,cmp);
for(q=1;q<e;q<<=1);
for(i=1;i<=e&&!o;i++)
     {w=p-r[i].t;
     if(w<=0)
           break;
     for(j=0,m=q;m&&!o;m>>=1)
     if(m+j<=e)
           if(r[j+m].t<w)
                  j+=m;
           else
                  if(r[j+m].t==w)
                         o=1,l=i,k=j+m;}
if(!o)
     printf("-1");
else
     {u[1]=r[l].x,u[2]=r[l].y,u[3]=r[l].z,u[4]=r[k].x,u[5]=r[k].y,u[6]=r[k].z;
     sort(u+1,u+7),printf("%d %d %d %d %d %d",u[1],u[2],u[3],u[4],u[5],u[6]);}
return 0;}