Pagini recente » Cod sursa (job #2470115) | Cod sursa (job #2223274) | Cod sursa (job #1929294) | Cod sursa (job #1949090) | Cod sursa (job #1279827)
#include <cstdio>
#include <cstdlib>
#include <unordered_map>
using namespace std;
const int k = 6;
int n, s;
int v[101], sol[k];
typedef struct triplet {
int a; int b; int c;
triplet(int a, int b, int c) {
this->a = a; this->b = b; this->c = c;
}
} triplet;
unordered_map<int, triplet> h3;
typedef unordered_map<int, triplet>::const_iterator hit;
int cmp (const void *p1, const void *p2)
{
int a = *(int*)p1, b = *(int*)p2;
return a - b;
}
bool pb(int ii, int p, int ssol)
{
if (p == k - 3) {
hit t = h3.find(s-ssol);
if (t == h3.end())
return false;
sol[3] = t->second.a;
sol[4] = t->second.b;
sol[5] = t->second.c;
return true;
}
for (int i = ii; i < n; i++) {
if (ssol + v[i] * (k-p) > s)
return false;
sol[p] = v[i];
if(pb(i, p + 1, ssol + v[i]))
return true;
}
return false;
}
int main()
{
FILE *in = fopen("loto.in", "r");
FILE *out = fopen("loto.out", "w");
fscanf(in, "%d %d", &n, &s);
for (int i = 0; i < n; i++) {
fscanf(in, "%d", &v[i]);
}
qsort(v, n, sizeof(int), cmp);
for (int i = 0; i < n; i++)
for (int j = i; j < n; j++)
for (int k = j; k < n; k++)
h3.insert(make_pair<int, triplet>(v[i] + v[j] + v[k], triplet(v[i], v[j], v[k])));
if (pb(0, 0, 0)) {
for (int i = 0; i < k; i++) {
fprintf(out, "%d ", sol[i]);
}
} else {
fprintf(out, "-1");
}
return 0;
}