#include "molecules.h" // Обязательно для грейдера
#include <vector>
#include <algorithm>
#include <bitset>
using namespace std;
// УБИРАЕМ #define int long long, так как это ломает сигнатуру функции
// Если нужны long long внутри, используй их явно для переменных.
// Ограничение битсета. ВАЖНО: для этой задачи N=200,000 слишком мало,
// так как веса могут быть большими. Но я оставляю твою логику для примера.
const int MAX_SUM = 200010;
bitset<MAX_SUM> b;
std::vector<int> find_subset(int l, int u, std::vector<int> w) {
int n = w.size();
// Очищаем битсет для каждого запуска (если тестов несколько)
b.reset();
b[0] = 1;
// ВНИМАНИЕ: Если w[i] > MAX_SUM, этот код упадет (Out of bounds)
// В оригинальной задаче Molecules веса до 10^9, битсет тут не подойдет.
for(int i = 0; i < n; i++) {
if (w[i] < MAX_SUM) { // Защита от выхода за границы
b |= (b << w[i]);
}
}
int need = -1;
for(int i = l; i <= u; i++) {
// Проверяем, не вышли ли мы за границы битсета
if(i < MAX_SUM && b[i]) {
need = i;
break;
}
}
if(need == -1) {
return std::vector<int>(0); // Возвращаем пустой вектор
}
std::vector<int> ans;
// Восстановление ответа (рюкзак)
// Тут нужно идти в обратном порядке или использовать массив предков,
// но твой подход с жадным восстановлением может сработать только если повезет.
// Обычно для битсета нужен массив p[sum] = last_added_item.
// Упрощенная логика восстановления (как у тебя была):
while(need > 0) {
vector<int> v;
int cur = -1;
for(int i = 0; i < w.size(); i++) {
if(b[need - w[i]]) {
need -= w[i];
cur = i;
break;
}
}
for(int i = 0; i < w.size(); i++) {
if(i == cur) continue;
v.push_back(w[i]);
}
w = v;
ans.push_back(cur);
}
sort(ans.begin(), ans.end());
// Возвращаем индексы (0-based)
return ans;
}
// Функции main() здесь быть НЕ ДОЛЖНО
Compilation message (stderr)
molecules.h:1:9: warning: #pragma once in main file
1 | #pragma once
| ^~~~
molecules_c.h:1:9: warning: #pragma once in main file
1 | #pragma once
| ^~~~| # | 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... |