Submission #1247125

#TimeUsernameProblemLanguageResultExecution timeMemory
1247125countlessTowns (IOI15_towns)C++20
25 / 100
42 ms480 KiB
#include "towns.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; #define sp <<" "<< #define endl "\n" map<pair<int, int>, ll> memo; ll query(int i, int j) { if (i == j) return 0; if (i > j) swap(i, j); if (memo.count({i, j})) return memo[{i, j}]; return memo[{i, j}] = getDistance(i, j); } int hubDistance(int N, int sub) { memo.clear(); ll best = LLONG_MAX; ll mn, fir = -1, sec = -1, mid = -1; mn = -1; for (int i = 0; i < N; i++) { ll curr = query(0, i); if (curr > mn) { mn = curr; fir = i; } } mn = -1; for (int i = 0; i < N; i++) { ll curr = query(fir, i); if (curr > mn) { mn = curr; sec = i; } } // ll dia = mn; // vector<pair<ll, ll>> cands; // for (int i = 0; i < N; i++) { // ll curr = (query(fir, i) + query(sec, i) - query(fir, sec)) / 2; // ll cand = abs(curr - query(fir, sec)); // cands.emplace_back(cand, i); // } // sort(cands.begin(), cands.end()); auto work = [&](ll a, ll b, ll c) -> ll { ll AB = query(a, b); ll BC = query(b, c); ll CA = query(c, a); cerr << AB sp BC sp CA << endl; ll ABC = (AB+BC+CA) / 2; ll A = ABC-BC, B = ABC-CA, C = ABC-AB; cerr << A sp B sp C << endl; return max({A, B, C}); }; ll ans = LLONG_MAX; for (int i = 0; i < N; i++) { ans = min(ans, work(fir, sec, i)); } return ans; }
#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...