This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <cstdio>
#include <vector>
#include <map>
#include <utility>
using namespace std;
// mappa numero-indice
map<int, int> found;
int nn[(int)1e6 + 5];
int nni;
vector<int> find_subset(int l, int u, vector<int> w)
{
found[0] = -1;
for (size_t i = 0; i < w.size(); i++)
{
int tw = w[i];
fprintf(stderr, "tw = %d\n", tw);
nni = 0;
for (auto it = found.begin(); it != found.end(); it++)
{
int nxt = it->first + tw;
if (nxt > u)
continue;
auto nit = found.find(nxt);
if (nit != found.end())
continue;
nn[nni++] = nxt;
}
for (int k = 0; k < nni; k++)
{
found[nn[k]] = i;
}
}
// for(auto it = found.begin(); it != found.end(); it++) {
// fprintf(stderr, "D: %d -> %d\n", it->first, it->second);
// }
auto it = found.lower_bound(l);
// fprintf(stderr, "DIT: %d -> %d\n", it->first, it->second);
if (it != found.end() && it->first <= u)
{
vector<int> inx;
int ww = it->first;
int val = it->second;
while(val != -1)
{
inx.push_back(val);
int nxt = ww - w[val];
// fprintf(stderr, "Dowo: val = %d, nxt=%d\n", val, nxt);
val = found[nxt];
ww = nxt;
// sleep(1);
}
return inx;
}
else
{
return vector<int>(0);
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |