Cod sursa(job #316164)
#include <cstdio>
#include <vector>
#include <algorithm>
#define maxh 666013
#define pb push_back
using namespace std;
vector<int> H[maxh];
int a[101], n, S;
typedef vector<int>::iterator vit;
inline int find(int v)
{
int h=v%maxh;
for(vit i=H[h].begin(); i != H[h].end(); ++i)
if(*i == v) return 1;
return 0;
}
inline void insert(int v)
{
int h=v%maxh;
if(find(v)) return ;
H[h].pb(v);
}
void afis(int x, int y, int z)
{
int i, j, k, s= S - a[x] - a[y] - a[z];
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)
{
printf("%d %d %d %d %d %d\n", a[x], a[y], a[z], a[i], a[j], a[k]);
return;
}
}
int main()
{
int i,j,k;
freopen("loto.in","r",stdin);
freopen("loto.out","w",stdout);
scanf("%d %d\n", &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(k=1; 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]))
{
afis(i,j,k);
return 0;
}
printf("-1\n");
return 0;
}