# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
556793 | blue | 도시들 (IOI15_towns) | C++17 | 17 ms | 356 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "towns.h"
#include <vector>
#include <cmath>
#include <set>
#include <iostream>
#include <cassert>
using namespace std;
namespace
{
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 ST = 0; //diameter
// cerr << "done\n";
vi distS(N);
distS[S] = 0;
distS[0] = dist0[S];
int 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;
}
}
}
// cerr << "S = " << S << "\n";
vi S0_dist(N);
for(int i = 0; i < N; i++)
S0_dist[i] = (distS[i] + dist0[i] - distS[0])/2;
vi xcoord(N);
for(int i = 0; i < N; i++)
xcoord[i] = distS[i] - S0_dist[i];
int res = 5'000'000;
int dist0_ST = (dist0[S] + dist0[T] - ST)/2;
assert(2*(dist0[S] - dist0_ST) >= distS[T]);
// assert((dist0[S] + getDistance(0, T) - distS[T]) <= distS[T])
int best_coord = 0;
for(int i = 0; i < N; i++)
{
if(2 * xcoord[i] > ST)
res = min(res, xcoord[i]);
else
res = min(res, ST - xcoord[i]);
}
return res;
return ST - best_coord;
}
컴파일 시 표준 에러 (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... |