Pagini recente » Atasamentele paginii Profil CristianBarbieru | Cod sursa (job #1715071)
#include <cstdio>
#include <bitset>
#include <algorithm>
using namespace std;
int j,t,mid,p,u,aux,n,i,sum,s,nr,a[102],sol[8];
struct elem{
int s,a,b,c;
}su[1000002];
bool cmp(elem x,elem y){
if(x.s>y.s)
return 0;
return 1;
}
bitset <300000001> f;
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", &a[i]);
for(i=1;i<=n;++i){
for(j=1;j<=n;++j){
for(t=1;t<=n;++t){
f[a[i]+a[j]+a[t]]=1;
su[++nr].s=a[i]+a[j]+a[t];
su[nr].a=a[i];
su[nr].b=a[j];
su[nr].c=a[t];
}sum-=a[j];
}
}
sort(su+1,su+nr+1,cmp);
for(i=1;i<=nr;++i){
if(s-su[i].s>=0){
if(f[s-su[i].s]==1){
p=1,u=nr;
aux=s-su[i].s;
while(p<=u){
mid=(p+u)/2;
if(aux<su[mid].s) u=mid-1;
else if(aux>su[mid].s) p=mid+1;
else break;
}
sol[1]=su[mid].a;
sol[2]=su[mid].b;
sol[3]=su[mid].c;
sol[4]=su[i].a;
sol[5]=su[i].b;
sol[6]=su[i].c;
sort(sol+1,sol+7);
for(i=1;i<=6;++i)
printf("%d ",sol[i]);
return 0;
}
}
}printf("-1");
return 0;
}