Pagini recente » Cod sursa (job #1008257) | Cod sursa (job #1221185) | Cod sursa (job #497990) | Cod sursa (job #98354) | Cod sursa (job #135293)
Cod sursa(job #135293)
#include<stdio.h>
#define inter(x) y=sum[i][x];sum[i][x]=sum[j][x];sum[j][x]=y;
int i,j,k,ok,mij;
long long nr,a[7],s,suma,l,r,sum[1000][4],n;
void sort(int l,int r)
{int i,j,x,y;
i=l;j=r;x=sum[(l+r)/2][0];
do
{
while (sum[i][0]<x) i++;
while (sum[j][0]>x) j--;
if (i<=j)
{inter(1);inter(2);inter(3);inter(0);
i++;j--;}
}while (i<=j);
if (l<j) sort(l,j);
if (i<r) sort(i,r);
}
int main()
{
freopen("loto.in","r",stdin);
freopen("loto.out","w",stdout);
scanf("%lld %lld",&n,&s);
for(i=1;i<=n;i++)
scanf("%lld",&a[i]);
nr=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
for(k=1;k<=n;k++) {
sum[++nr][0]=a[i]+a[j]+a[k];
sum[nr][1]=i;
sum[nr][2]=j;
sum[nr][3]=k;
}
sort(1,nr);
for (i=1;i<=nr;i++)
{
suma=s-sum[i][0];
l=i;r=nr;
while (l<r)
{
mij=(l+r)/2;
if (sum[mij][0]==suma)
{for (j=1;j<=3;j++)
{
printf("%d ",sum[i][j]);
printf("%d ",sum[mij][j]);
}
return 0;
}
if (sum[mij][0]>suma) r=mij-1;
else l=mij+1;
}
}
printf("-1");
return 0;
}