Pagini recente » Cod sursa (job #660420) | Cod sursa (job #1450305) | Cod sursa (job #2627494) | Cod sursa (job #1865181) | Cod sursa (job #245191)
Cod sursa(job #245191)
#include <stdio.h>
#include <algorithm>
using namespace std;
int caut(int x,int r,int sum[250005])
{
int st=1,dr=r,m;
while (st!=dr)
{
m=(st+dr)/2;
if (x>sum[m])
st=m+1;
else
dr=m;
}
if (x==sum[st])
return 1;
return 0;
}
int diferenta(int x,int n,int a[105])
{
int i,j,k;
for (i=1; i<=n; i++)
for (j=i; j<=n; j++)
for (k=j; k<=n; k++)
if (a[i]+a[j]+a[k]==x)
return printf("%d %d %d",a[i],a[j],a[k]);
}
int main()
{
freopen("loto.in","r",stdin);
freopen("loto.out","w",stdout);
int i,j,k,n,s,a[105],sum[250005],r=0,sumpart=0,verif=0;
scanf("%d%d",&n,&s);
for (i=1; i<=n; i++)
scanf("%d",&a[i]);
for (i=1; i<=n; i++)
for (j=i; j<=n; j++)
for (k=j; k<=n; k++)
sum[++r]=a[i]+a[j]+a[k];
sort(sum+1, sum+r+1);
for (i=1; i<=n; i++)
{
if (verif==1)
break;
for (j=i; j<=n; j++)
{
if (verif==1)
break;
for (k=j; k<=n; k++)
{
sumpart=a[i]+a[j]+a[k];
if (caut(s-sumpart,r,sum))
{
printf("%d %d %d ",a[i],a[j],a[k]);
diferenta(s-sumpart,n,a);
verif=1;
break;
}
}
}
}
if (verif==0)
printf("-1");
return 0;
}