Cod sursa(job #316156)
#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 void insert(int v)
{
int h=v%maxh;
H[h].pb(v);
}
inline int find(int v)
{
int h=v%maxh;
if(find(H[h].begin(), H[h].end(), v) == H[h].end()) return 0;
return 1;
}
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=i; 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", x, y, z, i, j, 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=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]))
{
afis(i,j,k);
return 0;
}
printf("-1\n");
return 0;
}