This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#ifdef NYAOWO
#include "grader.cpp"
#endif
#include "towns.h"
#include <bits/stdc++.h>
#define For(i, a, b) for(int i = a; i <= b; i++)
#define Forr(i, a, b) for(int i = a; i >= b; i--)
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define sz(x) ((int)x.size())
#define eb emplace_back
#define int LL
using namespace std;
using LL = long long;
using pii = pair<int, int>;
map<pii, int> mem;
int dist(int a, int b) {
if(a > b) swap(a, b);
pii p(a, b);
if(mem.count(p)) return mem[p];
mem[p] = getDistance((int32_t)a, (int32_t)b);
return mem[p];
}
int32_t hubDistance(int32_t N, int32_t sub) {
// remember to init!
mem.clear();
int dia = 0;
int p1 = 0;
For(i, 1, N - 1) {
int d = dist(i, 0);
if(d > dia) {
dia = d;
p1 = i;
}
}
dia = 0;
int p2 = p1;
For(i, 0, N - 1) {
int d = dist(p1, i);
if(d > dia) {
dia = d;
p2 = i;
}
}
map<int, int> cnt;
For(i, 0, N - 1) if(i != p1 && i != p2) {
int d1 = dist(p1, i);
int d2 = dist(p2, i);
cnt[(dia + d1 - d2) / 2]++;
}
int mn = dia;
vector<int> pos, val;
vector<int> pre, suf;
for(auto &i:cnt) {
mn = min(mn, max(i.F, dia - i.F));
pos.eb(i.F);
val.eb(i.S);
pre.eb(0);
suf.eb(0);
}
int m = sz(pos);
pre[0] = 1;
For(i, 1, m - 1) pre[i] = pre[i - 1] + val[i - 1];
suf[m - 1] = 1;
Forr(i, m - 2, 0) suf[i] = suf[i + 1] + val[i + 1];
bool balanced = false;
For(i, 0, m - 1) {
if(max(pos[i], dia - pos[i]) == mn) {
int mx_sub = max({val[i], pre[i], suf[i]});
if(2 * mx_sub <= N) balanced = true;
}
}
if(!balanced) mn = -mn;
return (int32_t)mn;
}
Compilation message (stderr)
towns.cpp: In function 'int32_t hubDistance(int32_t, int32_t)':
towns.cpp:29:40: warning: unused parameter 'sub' [-Wunused-parameter]
29 | int32_t hubDistance(int32_t N, int32_t sub) {
| ~~~~~~~~^~~
# | 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... |