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 <bits/stdc++.h>
using namespace std;
int dv[200], du[200];
map<int, std::vector<int>> dis;
int hubDistance(int N, int sub) {
int v = 0, u = 0;
for(int i = 0; i < N; i++)
dv[i] = getDistance(v, i);
for(int i = 0; i < N; i++)
if(dv[i] > dv[u])
u = i;
int D = dv[u], T = 0;
for(int i = 0; i < N; i++){
du[i] = getDistance(u, i);
T = max(T, du[i]);
}
swap(v, u);
swap(dv, du);
int r = 1000000000;
for(int i = 0; i < N; i++){
int q = (D + dv[i] - du[i]) >> 1;
r = min(r, max(q, T - q));
}
for(int i = 0; i < N; i++)
dis[D + dv[i] - du[i]].push_back(i);
int chk;
if(dis.find(r * 2) != dis.end())
chk = r * 2;
else
chk = (T - r) * 2;
int c1 = 0, c2 = 0, c3 = 0;
for(int i = 0; i < N; i++){
if(D + dv[i] - du[i] < 2 * r) c1++;
else if(D + dv[i] - du[i] > 2 * r) c2++;
else c3++;
}
if(max(c1, max(c2, c3)) <= N / 2) return r;
if(c1 > N / 2) return -r;
if(c2 > N / 2){
if(chk == r * 2 && dis.find((T - r) * 2) != dis.end()) chk = (T - r) * 2;
else return -r;
}
return r;
vector<int> fer = dis[chk];
vector<int> rep;
int i;
for(i = 1; i < fer.size(); i++){
if(getDistance(fer[i], fer[i - 1]) == dv[fer[i]] + du[fer[i - 1]] - D){
rep.push_back(i - 1);
rep.push_back(i);
i++;
}
}
if(i == fer.size() + 1) return r;
int sz = fer.size() - rep.back() - 1, l = 0;
for(int& x : rep){
if(getDistance(fer[x], fer.back()) != dv[fer[x]] + du[fer.back()] - D){
sz += x - l;
}
l = x;
}
if(sz > N / 2) return -r;
return r;
}
Compilation message (stderr)
towns.cpp: In function 'int hubDistance(int, int)':
towns.cpp:51:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(i = 1; i < fer.size(); i++){
~~^~~~~~~~~~~~
towns.cpp:59:7: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if(i == fer.size() + 1) return r;
~~^~~~~~~~~~~~~~~~~
towns.cpp:60:35: warning: conversion to 'int' from 'std::vector<int>::size_type {aka long unsigned int}' may alter its value [-Wconversion]
int sz = fer.size() - rep.back() - 1, l = 0;
~~~~~~~~~~~~~~~~~~~~~~~~^~~
towns.cpp:8:28: warning: unused parameter 'sub' [-Wunused-parameter]
int hubDistance(int N, int sub) {
^~~
# | 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... |