Pagini recente » Cod sursa (job #2741212) | Cod sursa (job #1360268) | Cod sursa (job #3202158) | Cod sursa (job #1473200) | Cod sursa (job #331928)
Cod sursa(job #331928)
#include<cstdio>
#include <algorithm>
using namespace std;
#define N 1000000
int v[N],sum,min=100000000,nr;
struct loto {int x,y,z,s;}a[N];
short int n;
void citire()
{
freopen("loto.in","r",stdin);
freopen("loto.out","w",stdout);
scanf("%hd%d",&n,&sum);
for (int i=1; i<=n; ++i)
scanf("%d",&v[i]);
}
bool compar(const loto &d, const loto &f)
{
return (d.s<f.s);
}
void sume()
{
for (int i=1; i<=n; ++i)
for (int j=i; j<=n; ++j)
for (int k=j; k<=n; ++k)
{
a[++nr].x=v[i];
a[nr].y=v[j];
a[nr].z=v[k];
a[nr].s=v[i]+v[j]+v[k];
}
sort(a+1, a+nr+1, compar);
}
int caut (int p, int x1)
{
int u=nr,m;
while (p!=u)
{
m=(p+u)/2;
if (a[m].s>=x1)
u=m;
else
p=m+1;
}
if (a[p].s==x1)
return p;
return -1;
}
void search()
{
int ant=0;
for (int i=1; i<=nr; ++i)
{
if (ant)
while (a[i+1].s==ant&&i+1<=nr)
++i;
ant=sum-a[i].s;
int c=caut (i,ant);
if (c!=-1)
{
printf("%d %d %d %d %d %d",a[i].x,a[i].y,a[i].z,a[c].x,a[c].y,a[c].z);
return;
}
}
printf("-1");
}
int main()
{
citire();
sume();
search();
return 0;
}