#include "towns.h"
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
map<pair<int, int>, int> distances;
int getDist(int i, int j) {
if(i == j) return 0;
if(i > j) swap(i, j);
if(distances.count({i, j})) {
return distances[make_pair(i, j)];
}
return distances[make_pair(i, j)] = getDistance(i, j);
}
vector<int> dists;
map<ll, int> xs;
int hubDistance(int n, int sub) {
ll ans = 2e10;
distances.clear();
dists.clear();
xs.clear();
dists.resize(n);
int ma = -1, best = -1;
for(int i = 0; i < n; i++) {
dists[i] = getDist(0, i);
if(ma < dists[i]) {
ma = dists[i];
best = i;
}
}
int x = best;
ma = -1, best = -1;
for(int i = 0; i < n; i++) {
dists[i] = getDist(x, i);
if(ma < dists[i]) {
ma = dists[i];
best = i;
}
}
int y = best;
ll c = ma;
for(int i = 0; i < n; i++) {
int a = getDist(x, i);
int b = getDist(y, i);
ans = min(ans, max(a + c - b, b + c - a));
if(!xs.count(a+c-b)) {
xs[a+c-b] = 1;
}
else xs[a+c-b]++;
}
ans /= 2;
ll cand = -1;
int sum = 0;
for(auto p : xs) {
bool ok = (max(p.first, 2 * c - p.first) == (ll)ans * 2);
ok &= (sum <= n/2);
sum += p.second;
if(sub == 4) ok &= (p.second <= n/2);
ok &= (n - sum <= n/2);
if(ok) {
if(sub == 4) return (int)ans;
}
}
if(sub == 4) {
return (int)-ans;
}
return (int)ans;
}
Compilation message
towns.cpp: In function 'int hubDistance(int, int)':
towns.cpp:56:8: warning: unused variable 'cand' [-Wunused-variable]
56 | ll cand = -1;
| ^~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
11 ms |
340 KB |
Output is correct |
2 |
Correct |
10 ms |
368 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
13 ms |
356 KB |
Output is correct |
5 |
Correct |
14 ms |
364 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
12 ms |
364 KB |
Output is correct |
2 |
Correct |
11 ms |
340 KB |
Output is correct |
3 |
Correct |
13 ms |
360 KB |
Output is correct |
4 |
Correct |
13 ms |
340 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
10 ms |
340 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
13 ms |
360 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
10 ms |
368 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
10 ms |
340 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |