이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "towns.h"
using namespace std;
#define SZ(x) int(x.size())
#define sep ' '
const int MAXN = 110 + 10;
const int MOD = 1e9 + 7;
int dist[4][MAXN] , val[MAXN][MAXN];
int get(int v , int u){
if(val[v][u] != -1) return val[v][u];
val[v][u] = val[u][v] = getDistance(v , u);
return val[v][u];
}
int ask(int ind , int v , int n){
int mx = 0;
for(int i = 0 ; i < n ; i++){
dist[ind][i] = get(v , i);
if(dist[ind][i] > dist[ind][mx]) mx = i;
}
return mx;
}
int hubDistance(int N, int sub) {
memset(val , -1 , sizeof(val));
int v = ask(0 , 0 , N);
int u = ask(1 , v , N);
ask(2 , u , N);
int mn = MOD;
for(int i = 0 ; i < N ; i++){
mn = min(mn , abs(dist[1][i] - dist[2][i]));
// cout << i << sep << dist[1][i] << sep << dist[2][i] << endl;
}
// cout << v << sep << u << endl;
int xl = 0 , xr = 0 , yl = 0 , yr = 0;
vector<int> v1 , v2;
for(int i = 0 ; i < N ; i++){
int val = dist[1][i] - dist[2][i];
dist[3][i] = (dist[1][i] + dist[2][i] - dist[1][u]) / 2;
if(val < -mn) xl++;
if(val == -mn) yl++ , v1.push_back(i);
if(val == mn) yr++ , v2.push_back(i);
if(val > mn) xr++;
}
int R = (dist[1][u] + mn) / 2;
if(xl <= N / 2 && yl <= N / 2 && xr + yr <= N / 2) return R;
if(xr <= N / 2 && yr <= N / 2 && xl + yl <= N / 2) return R;
if(sub == 1 || sub == 2 || sub == 4) return -R;
yl = yr = 0;
for(int i = 0 ; i < SZ(v1) ; i++){
int cur = 1;
for(int j = 0 ; j < i ; j++){
if(dist[3][v1[i]] + dist[3][v1[j]] > get(v1[i] , v1[j])) cur++;
}
yl = max(yl , cur);
}
for(int i = 0 ; i < SZ(v2) ; i++){
int cur = 1;
for(int j = 0 ; j < i ; j++){
if(dist[3][v2[i]] + dist[3][v2[j]] > get(v2[i] , v2[j])) cur++;
}
yr = max(yr , cur);
}
//cout << xl << sep << yl << sep << xr << sep << yr << endl;
if(xl <= N / 2 && yl <= N / 2 && xr + SZ(v2) <= N / 2) return R;
if(xr <= N / 2 && yr <= N / 2 && xl + SZ(v1) <= N / 2) return R;
return -R;
}
컴파일 시 표준 에러 (stderr) 메시지
towns.cpp: In function 'int hubDistance(int, int)':
towns.cpp:42:7: warning: declaration of 'val' shadows a global declaration [-Wshadow]
42 | int val = dist[1][i] - dist[2][i];
| ^~~
towns.cpp:11:21: note: shadowed declaration is here
11 | int dist[4][MAXN] , val[MAXN][MAXN];
| ^~~
# | 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... |