제출 #1200308

#제출 시각아이디문제언어결과실행 시간메모리
1200308MinaRagy06Finding Routers (IOI20_routers)C++20
96.63 / 100
344 ms420 KiB
#include <bits/stdc++.h> #ifdef MINA #include "grader.cpp" #endif #include "routers.h" using namespace std; #define ll long long #define SZ(x) (int) x.size() vector<int> find_routers(int len, int n, int q) { vector<int> p = {0}; array<int, 2> mn = {int(1e9), -1}; for (int b = 1; b <= len; b++) { mn = min(mn, (array<int, 2>) {(n - SZ(p)) * (__lg(b) + 2) + len / b, b}); } int b = mn[1]; for (int st = 1; st <= len && SZ(p) < n;) { int en = min(st + b - 1, len); if (en < p.back() + 1) { st = en + 1; continue; } if (SZ(p) < n && (en == len || use_detector(en) >= SZ(p))) { int l = p.back() + 1, r = en; while (l <= r) { int md = ((l + r) >> 1); if (use_detector(md) >= SZ(p)) { r = md - 1; } else { l = md + 1; } } l--; p.push_back(l + l - p.back()); st = p.back() + 1; } else { st = en + 1; } array<int, 2> mn = {int(1e9), -1}; for (int x = 1; x <= len; x++) { mn = min(mn, (array<int, 2>) {(n - SZ(p)) * (__lg(x) + 2) + (len - st + 1) / x, x}); } b = mn[1]; } return p; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...