Pagini recente » Cod sursa (job #3179916) | Cod sursa (job #928552) | Cod sursa (job #11536) | Cod sursa (job #561595) | Cod sursa (job #491629)
Cod sursa(job #491629)
#include <stdio.h>
int v[101],n,sum,i,j,k,st,dr,find,i2,i3,mij,t;
struct loto{int a,b,c,s;};
loto a[1000010];
inline void interschimba(int x, int y)
{
int z=x;
x=y;
y=z;
}
inline void qsort(int l, int r)
{
int st=l,dr=r;
int pivot=a[(l+r)/2].s;
while(st<=dr)
{
while(a[st].s < pivot) ++st;
while(a[dr].s > pivot) --dr;
if(st<=dr)
{
interschimba(a[st].a,a[dr].a);
interschimba(a[st].b,a[dr].b);
interschimba(a[st].c,a[dr].c);
interschimba(a[st].s,a[dr].s);
++st;
--dr;
}
}
if(l<dr) qsort(l,dr);
if(st<r) qsort(st,r);
}
int main()
{
freopen("loto.in","r",stdin);
freopen("loto.out","w",stdout);
scanf("%d %d",&n,&sum);
for(i=1; i<=n; ++i)
scanf("%d",&v[i]);
for(i=1; i<=n; ++i)
for(j=1; j<=n; ++j)
for(k=1; k<=n; ++k)
{
t++;
a[t].a=i;
a[t].b=j;
a[t].c=k;
a[t].s=v[i]+v[j]+v[k];
}
qsort(1,t);
for(i=1; (i<=t) && (a[i].s <= sum-a[1].s); ++i)
{
find=sum-a[i].s;
st=1;
dr=t;
if(a[i].s!=a[i-1].s)
while(st<=dr)
{
mij=(st+dr)/2;
if(a[mij].s==find)
{
i2=i;
i3=mij;
i+=t;
st=dr+1;
}
if(a[mij].s<find) st=mij+1;
if(a[mij].s>find) dr=mij-1;
}
}
if(i2!=0)
printf("%d %d %d %d %d %d",v[a[i2].a],v[a[i2].b],v[a[i2].c],v[a[i3].a],v[a[i3].b],v[a[i3].c]);
else
printf("-1");
return 0;
}