Pagini recente » Cod sursa (job #2381212) | Cod sursa (job #3182997) | Cod sursa (job #3180875) | Cod sursa (job #895650) | Cod sursa (job #493504)
Cod sursa(job #493504)
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
int n,s,i,j,v[101],vv[101],m[20000000][4],k,aux[4],sum[2000000],ok,mij;
int bin(int x)
{
int s,d;
s=1;d=k;
mij=(s+d)/2;
while((x!=sum[mij])&&(d-s>0))
{
if (sum[mij]>x)
{
d=mij-1;
}
else s=mij+1;
mij=(s+d)/2;
}
if (x==sum[mij])
{
ok=1;
}
}
int back(int p)
{
int i;
if (p==4)
{
k++;
int j,ss;
ss=0;
for (j=1;j<=3;j++)
{
m[k][j]=v[vv[j]];
ss=ss+v[vv[j]];
}
m[k][0]=ss;
sum[k]=ss;
}
else
{
for (i=1;i<=n;i++)
{
vv[p]=i;
back(p+1);
}
}
}
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]);
}
back(1);
sort(sum,sum+k);
ok=0;
for (i=1;i<=k;i++)
{
int c=0;
c=s-m[i][0];
bin(c);
if (ok==1)
{
int a=0,b=0,jj;
for (jj=1;jj<=k;jj++)
{
if ((m[i][0]==m[jj][0])&&(a==0)) a=jj;
if ((c==m[jj][0])&&(b==0)) b=jj;
}
for (j=1;j<=3;j++)
printf("%d ",m[a][j]);
for (j=1;j<=3;j++)
printf("%d ",m[b][j]);
i=1000000;
}
}
if (ok==0)
printf("-1");
return 0;
}