Pagini recente » Cod sursa (job #2104611) | Cod sursa (job #1890049) | Cod sursa (job #1651638) | Rating Mihai Birsan (MihaiBirsan) | Cod sursa (job #1279800)
#include <cstdio>
#include <cstdlib>
#include <set>
using namespace std;
const int k = 6;
int n, s;
int v[101], sol[k];
set<int> myset;
int cmp (const void *p1, const void *p2)
{
int a = *(int*)p1, b = *(int*)p2;
return a - b;
}
int pb(int ii, int p, int ssol)
{
if (ssol > s) {
exit(1);
}
if (p == k - 1) {
if (myset.find(s - ssol) != myset.end()) {
sol[p] = s - ssol;
return 0;
} else {
return -1;
}
}
for (int i = ii; i < n; i++) {
if (ssol + v[i] * (k-p) > s)
return 1;
sol[p] = v[i];
int pbr = pb(i, p + 1, ssol + v[i]);
if (pbr == -1)
continue;
else if (pbr == 0)
return 0;
else
break;
}
return -1;
}
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]);
myset.insert(v[i]);
}
qsort(v, n, sizeof(int), cmp);
if (pb(0, 0, 0) == 0) {
for (int i = 0; i < k; i++) {
fprintf(out, "%d ", sol[i]);
}
} else {
fprintf(out, "-1");
}
return 0;
}