Pagini recente » Cod sursa (job #504640) | Cod sursa (job #1446000) | Cod sursa (job #507260) | Cod sursa (job #1461175) | Cod sursa (job #1731454)
#include <stdio.h>
#include <algorithm>
using namespace std;
const int MAXN = 100;
int v[MAXN + 1], cnt = 0;
struct sums
{
int val, a, b, c;
} sum[MAXN * MAXN * MAXN + 1];
bool cmp(sums x, sums y)
{
return x.val < y.val;
}
int bs(int x)
{
int i = 0, step = 1 << 20;
while(step)
{
if(i + step <= cnt && sum[i + step].val < x)
i += step;
step >>= 1;
}
return i + 1;
}
int main()
{
FILE *fin, *fout;
fin = fopen("loto.in", "r");
fout = fopen("loto.out", "w");
int n, s;
fscanf(fin, "%d%d", &n, &s);
for(int i = 1; i <= n; i++)
fscanf(fin, "%d", &v[i]);
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
for(int k = 1; k <= n; k++)
{
sum[++cnt].val = v[i] + v[j] + v[k];
sum[cnt].a = v[i];
sum[cnt].b = v[j];
sum[cnt].c = v[k];
}
sort(sum + 1, sum + cnt + 1, cmp);
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
for(int k = 1; k <= n; k++)
{
int x = v[i] + v[j] + v[k];
int p = bs(s - x);
if(sum[p].val + x == s)
{
fprintf(fout, "%d %d %d %d %d %d", sum[p].a, sum[p].b, sum[p].c, v[i], v[j], v[k]);
return 0;
}
}
fprintf(fout, "-1");
return 0;
}