Submission #383749

#TimeUsernameProblemLanguageResultExecution timeMemory
383749LucaDantas도시들 (IOI15_towns)C++17
0 / 100
1 ms364 KiB
#include "towns.h" #include <cstring> #include <cstdio> #include <algorithm> #include <cassert> constexpr int maxn = 120; int dp[maxn][maxn], n, cnt = 0; int get(int i, int j) { if(i > j) std::swap(i, j); if(dp[i][j] != -1) return dp[i][j]; assert(++cnt <= 4*n); 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) { assert(0); n = N; 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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...