제출 #1306030

#제출 시각아이디문제언어결과실행 시간메모리
1306030not_suprised__Detecting Molecules (IOI16_molecules)C++20
0 / 100
1 ms468 KiB
#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. // Упрощенная логика восстановления (как у тебя была): vector<bool> was(n+1, 0); for(int i = 0; i < n; i++) { if(was[i]) continue; if(b[need - w[i]]) { need -= w[i]; was[i] = 1; } } for(int i = 0; i < n; i++) { if(was[i]) ans.push_back(i); } // Возвращаем индексы (0-based) return ans; } // Функции main() здесь быть НЕ ДОЛЖНО

컴파일 시 표준 에러 (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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...