Pagini recente » Cod sursa (job #1118335) | Cod sursa (job #1797802) | Cod sursa (job #690477) | Cod sursa (job #2231690) | Cod sursa (job #56598)
Cod sursa(job #56598)
#include <stdio.h>
#include <stdlib.h>
FILE *fin,*fout;
struct tr { long a,b,c,val; };
tr sums[1000001];
long poz,hsize,n,i,j,k,s,l,a[101];
long find(long val)
{
int i, step;
for (step = 1; step <= l; step <<= 1);
for (i = 0; step; step >>= 1)
if (i + step <= l && sums[i + step].val <= val)
i += step;
if (sums[i].val==val)
return i;
return 0;
}
/*
long long find(long long val)
{
long long st=1,dr=l,mij;
while (st<=dr)
{ mij=(st+dr)/2;
if (sums[mij].val==val)
return mij;
else
if (sums[mij].val<val)
st=mij+1;
else
dr=mij-1;
}
return 0;
}
*/
void reheap (int i)
{ int l=2*i,r=2*i+1,max=i;
tr aux;
if (l<=hsize&&sums[l].val>sums[i].val)
max=l;
if (r<=hsize&&sums[r].val>sums[max].val)
max=r;
if (max!=i)
{ aux=sums[max];
sums[max]=sums[i];
sums[i]=aux;
reheap(max);
}
}
void hsort()
{ hsize=l;
tr aux;
int i;
for (i=l/2;i>=1;i--)
reheap(i);
for (i=l;i>=2;i--)
{ aux=sums[1];
sums[1]=sums[i];
sums[i]=aux;
hsize--;
reheap(1);
}
}
int main()
{
fin=fopen("loto.in","rt");
fout=fopen("loto.out","wt");
fscanf(fin,"%ld %ld",&n,&s);
for (i=1;i<=n;i++)
fscanf(fin,"%ld",&a[i]);
l=1;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
for (k=1;k<=n;k++)
if (a[i]+a[j]+a[k]<=s)
{
sums[l].val=a[i]+a[j]+a[k];
sums[l].a=a[i];
sums[l].b=a[j];
sums[l].c=a[k];
l++;
}
l--;
hsort();
for (i=1;i<=l;i++)
{ if (s-sums[i].val>=sums[1].val&&s-sums[i].val<=sums[l].val&&sums[i].val!=sums[i-1].val)
{
poz=find(s-sums[i].val);
if (poz)
{ fprintf(fout,"%ld %ld %ld %ld %ld %ld\n",sums[i].a,sums[i].b,sums[i].c,sums[poz].a,sums[poz].b,sums[poz].c);
return 0;
}
}
}
fprintf(fout,"-1\n");
return 0;
}