Pagini recente » Cod sursa (job #301503) | Cod sursa (job #2274348) | Cod sursa (job #607467) | Cod sursa (job #313069) | Cod sursa (job #138217)
Cod sursa(job #138217)
#include<stdio.h>
#include<algorithm>
#define NMAX 105
#define MMAX 1000005
using namespace std;
long step,M,z[MMAX],s,in,sf,y[MMAX],x[NMAX],i,j,n,m,k,l,w;
struct kkt
{
long a,b,c;
};
kkt q[MMAX]/*,Q[MMAX]*/;
struct coi
{
long Y,Z;
};
coi sfarsit[MMAX];
int N, B[MMAX],C[MMAX];
int cmpf(const coi a,const coi b)
{
return a.Y<b.Y;
}
int main()
{
freopen("loto.in","r",stdin);
freopen("loto.out","w",stdout);
scanf("%ld%ld",&n,&k);
for (i=1;i<=n;i++)
scanf("%ld",&x[i]);
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
for (l=1;l<=n;l++)
{
y[++y[0]]=x[i]+x[j]+x[l];
q[y[0]].a=x[i];
q[y[0]].b=x[j];
q[y[0]].c=x[l];
z[y[0]]=y[0];
sfarsit[y[0]].Y=y[y[0]];
sfarsit[y[0]].Z=z[y[0]];
}
M=y[0];
y[0]=0;
// merge_sort(1,y[0]);
sort(sfarsit+1,sfarsit+M+1,cmpf);
for (i=1;i<=M;i++)
{
y[i]=sfarsit[i].Y;
z[i]=sfarsit[i].Z;
}
for (i=1;i<=M;i++)
{
s=k-y[i];
/* in=1;
sf=M;
while (in<=sf)
{
l=(in+sf)/2;
if (y[l]<s) in=l+1;
else
sf=l-1;
} */
for (step=1;step<M;step<<=1);
for (j=1;step;step>>=1)
if (j+step<M&&y[j+step]<=s)
j+=step;
if (y[j]==s) {printf("%ld %ld %ld %ld %ld %ld\n",q[z[i]].a,q[z[i]].b,q[z[i]].c,q[z[l]].a,q[z[l]].b,q[z[l]].c); return 0;}
}
printf("-1\n");
return 0;
}