이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "towns.h"
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cassert>
constexpr int maxn = 120;
int dp[maxn][maxn];
int get(int i, int j) {
if(i > j) std::swap(i, j);
if(dp[i][j] != -1) return dp[i][j];
return dp[i][j] = getDistance(i, j);
// return dp[i][j] != -1 ? dp[i][j] : dp[i][j] = getDistance(i, j);
}
int max(int a, int b) { return a > b ? a : b; }
int min(int a, int b) { return a < b ? a : b; }
int hubDistance(int N, int sub) {
memset(dp, -1, sizeof dp);
if(sub > 2) return 0;
int a = 0, b = 0, dist = 0;
for(int i = 0; i < 2; i++) {
for(int j = 0; j < N; j++) {
if(a != j) {
int v = getDistance(a, j);
if(v > dist) b = j, dist = v;
}
}
if(!i) a = b, dist = 0, b = 0;
}
int R = 0x3f3f3f3f;
// printf("%d %d\n", a, b);
for(int i = 0; i < N; i++) {
if(i == a || i == b) continue;
int d1 = getDistance(a, i), d2 = getDistance(b, i), c = (d1 + d2 - dist) >> 1;
// printf("%d %d %d %d\n", i, d1, d2, dist);
assert(d1 + d2 > dist && (d1 + d2 - dist) % 2 == 0);
R = min(R, max(d1, d2) - c);
}
assert(R < 0x3f3f3f3f);
return R;
}
# | 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... |