제출 #1137389

#제출 시각아이디문제언어결과실행 시간메모리
1137389gygDetecting Molecules (IOI16_molecules)C++20
100 / 100
869 ms17644 KiB
// Remember to check #define int long long #include "molecules.h" #include <bits/stdc++.h> using namespace std; #define lint long long #define arr array #define vec vector #define pli pair<lint, int> #define fir first #define sec second const int N = 2e5 + 5; lint l, u; int n; arr<pli, N> a; set<pli> ans; set<pli> st; int chck(int sz) { st.clear(); lint sm = 0; for (int i = 1; i <= sz; i++) sm += a[i].fir, st.insert(a[i]); if (l <= sm && sm <= u) { ans = st; return 1; } if (u < sm) return 2; for (int i = n - sz + 1; i <= n; i++) { if (st.count(a[i])) continue; sm -= st.begin()->fir, st.erase(st.begin()); sm += a[i].fir, st.insert(a[i]); if (l <= sm && sm <= u) { ans = st; return 1; } } return 3; } void srch() { int lw = 1, hg = n; while (lw <= hg) { int md = (lw + hg) / 2; int rsp = chck(md); if (rsp == 1) break; else if (rsp == 2) hg = md - 1; else lw = md + 1; } } int cntr = 0; vec<int> find_subset(int _l, int _u, vec<int> _a) { cntr++; assert(cntr == 1); l = _l, u = _u, n = _a.size(); for (int i = 1; i <= n; i++) a[i] = {_a[i - 1], i}; sort(a.begin() + 1, a.begin() + n + 1); srch(); vec<int> rt; for (pli x : ans) rt.push_back(x.sec - 1); return rt; // 0-indexed }

컴파일 시 표준 에러 (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...