Submission #207283

#TimeUsernameProblemLanguageResultExecution timeMemory
207283AQTTowns (IOI15_towns)C++14
0 / 100
23 ms632 KiB
#include <towns.h> #include <bits/stdc++.h> using namespace std; int dist[2][200]; int par[200], sz[200]; int hubDistance(int N, int sub){ int d1 = 0, d2 = 0; for(int i = 1; i<N; i++){ dist[0][i] = getDistance(0, i); if(dist[0][i] > dist[0][d1]){ d1 = i; } } for(int i = 0; i<N; i++){ dist[1][i] = getDistance(d1, i); if(dist[1][i] > dist[1][d2]){ d2 = i; } } int dia = dist[1][d2]; int ans = dia; for(int i = 0; i<N; i++){ int k = (dist[0][d1] + dist[1][i] - dist[0][i])/2; if(abs(ans-dia/2) > abs(k-dia/2)){ ans = k; } } ans = max(ans, dia-ans); vector<int> v, w, t; for(int i =0 ; i<N; i++){ par[i] = i; v.push_back(i); sz[i] = 1; } int g = -1; for(int k = 0; k<10; k++){ while(v.size() >= 2){ int n = v.back(); v.pop_back(); int m = v.back(); v.pop_back(); if(dist[1][n] + dist[1][m] - getDistance(n, m) > dia){ par[n] = -1; sz[m] += sz[n]; w.push_back(m); } else{ t.push_back(n); t.push_back(m); } } if(v.size() == 1 && w.empty()){ g = v[0]; break; } swap(v, w); } if(g != -1){ int cnt = 0; for(int i = 0; i<N; i++){ if(par[i] == i){ if(dist[1][i] + dist[1][g] - getDistance(i, g) > dia){ cnt += sz[i]; } } } if(cnt > N/2){ ans = -ans; } } else{ ans = -ans; } assert(ans <= 0); return ans; }

Compilation message (stderr)

towns.cpp: In function 'int hubDistance(int, int)':
towns.cpp:9:28: warning: unused parameter 'sub' [-Wunused-parameter]
 int hubDistance(int N, int sub){
                            ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...