Pagini recente » Cod sursa (job #1423179) | Cod sursa (job #719491) | Cod sursa (job #290322) | Cod sursa (job #648226) | Cod sursa (job #196575)
Cod sursa(job #196575)
#include <cstdio>
#define maxh 666013
struct nod { int v; nod *n;};
nod *H[maxh];
int a[128];
int n,S;
void read()
{
freopen("loto.in","r",stdin);
scanf("%d %d\n", &n, &S);
int i;
for(i=1;i<=n;++i) scanf("%d ", a+i);
}
inline void insert(int v)
{
int h=v%maxh;
nod *p=new nod;
p->v=v;
p->n=H[h];
H[h]=p;
}
inline int find(int v)
{
int h=v%maxh;
for(nod *p=H[h]; p; p=p->n)
if(p->v==v)return 1;
return 0;
}
void afis(int S)
{
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]==S)
{
printf("%d %d %d\n", a[i], a[j], a[k]);
return ;
}
}
void solve()
{
int i,j,k;
for(i=1;i<=n;++i)
for(j=i;j<=n;++j)
for(k=j;k<=n;++k)
insert(a[i]+a[j]+a[k]);
for(i=1;i<=n;++i)
for(j=i;j<=n;++j)
for(k=j;k<=n;++k)
if(S-(a[i]+a[j]+a[k])>=0)
if(find(S-(a[i]+a[j]+a[k])))
{
printf("%d %d %d ", a[i], a[j], a[k]);
afis(S-(a[i]+a[j]+a[k]));
return ;
}
printf("-1\n");
}
int main()
{
freopen("loto.out","w",stdout);
read();
solve();
return 0;
}