# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
832669 | aymanrs | Towns (IOI15_towns) | C++14 | 15 ms | 468 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "towns.h"
#include <bits/stdc++.h>
using namespace std;
int hubDistance(int N, int sub) {
int md = 0, wi = 1, wii;
for(int i = 1;i < N;i++){
int c = getDistance(0, i);
if(c > md){
md = c;
wi = i;
}
}
int d[N], dw[N];
d[wi]=0;
md = 0;
wii = 0;
for(int i = 0;i < N;i++){
if(i == wi) continue;
d[i] = getDistance(wi, i);
if(d[i] > md){
md = d[i];
wii = i;
}
}
dw[wii] = 0;
dw[wi] = md;
for(int i = 0;i < N;i++) if(i != wi && i != wii) dw[i] = getDistance(wii, i);
for(int i = 0;i < N;i++){
if(i == wi || i == wii) continue;
int dlca = (d[i]+dw[i]-d[wii])/2;
md = min(md, max(d[i]-dlca, dw[i]-dlca));
}
int C[2][2];
for(int i = 0;i < N;i++){
if(i == wi){
C[0][0]++;
continue;
}
if(i == wii){
C[1][0]++;
continue;
}
int dlca = (d[i]+dw[i]-d[wii])/2;
dlca = max(d[i]-dlca, dw[i]-dlca);
C[d[i] < dw[i]][dlca==md]++;
}
N/=2;
if(!C[0][1]) goto st;
if(C[0][1]-1 <= N && C[0][0] <= N && C[1][0]+C[1][1] <= N) return md;
st:
if(!C[1][1]) return -md;
if(C[1][1]-1 <= N && C[1][0] <= N && C[0][0]+C[0][1] <= N) return md;
return -md;
}
컴파일 시 표준 에러 (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... |