Submission #1200307

#TimeUsernameProblemLanguageResultExecution timeMemory
1200307MinaRagy06Finding Routers (IOI20_routers)C++20
39 / 100
1 ms328 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());
			break;
		}
		st = max(p.back() + 1, 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...