# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
556764 | blue | 도시들 (IOI15_towns) | C++17 | 17 ms | 980 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "towns.h"
#include <vector>
#include <cmath>
#include <set>
using namespace std;
using vi = vector<int>;
int hubDistance(int N, int sub)
{
vi dist0(N);
dist0[0] = 0;
for(int i = 1; i < N; i++)
dist0[i] = getDistance(0, i);
int S = 0;
for(int i = 1; i < N; i++)
if(dist0[i] > dist0[S])
S = i;
int T, ST = 0; //diameter
vi distS(N);
distS[S] = 0;
distS[0] = dist0[S];
T = 0;
ST = distS[0];
for(int i = 1; i < N; i++)
{
if(i != S)
{
distS[i] = getDistance(S, i);
if(distS[i] > ST)
{
ST = distS[i];
T = i;
}
}
}
vi diam_dist(N);
for(int i = 0; i < N; i++)
diam_dist[i] = (distS[i] + dist0[i] - distS[0])/2;
vi xcoord(N);
for(int i = 0; i < N; i++)
xcoord[i] = distS[i] - diam_dist[i];
int best_diff = 5'000'000;
set<int> best_coords;
for(int i = 0; i < N; i++)
{
if(abs(2*xcoord[i] - ST) < best_diff)
{
best_coords.clear();
best_diff = abs(2*xcoord[i] - ST);
}
if(abs(2*xcoord[i] - ST) == best_diff)
best_coords.insert(xcoord[i]);
}
return *best_coords.rbegin();
}
Compilation message (stderr)
# | 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... |