# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1243518 | moondarkside | Sorting (IOI15_sorting) | C++20 | 0 ms | 0 KiB |
#include<bits/stdc++.h>
using namespace std;
int getDistance(int i,int j);
int hubDistance(int N,int sub){
int D1=0;
int maxD=0;
for(int i=1;i<N;i++){
int d=getDistance(0,i);
if(d>maxD){
maxD=d;
D1=i;
}
}
std::vector<int> Distances;
maxD=0;
int D2=0;
for(int i=0;i<N;i++){
int d=getDistance(D1,i);
if(d>maxD){
maxD=d;
D2=i;
}
Distances.push_back(d);
}
int R=100000000;
std::vector<int> Distances2;
vector<int> Hubs;
for(int i=0;i<N;i++){
int d=getDistance(D2,i);
int k=(d+Distances[i]-maxD)/2;
int d1=Distances[i]-k;
int d2=d-k;
d=max(d1,d2);
if(d<R){
Hubs.clear();
Hubs.push_back(d1);
}
if(d==R){
Hubs.push_back(d1);
}
R=min(R,d);
Distances2.push_back(i);
}
vector<pair<int,int>> LRn(Hubs.size());
for(int i=0;i<N;i++){
int d=Distances2[i];
int k=(d+Distances[i]-maxD)/2;
int d1=Distances[i]-k;
for(int j=0;j<Hubs.size();j++){
if(Hubs[j]<d1){
LRn[j].first+=1;
}
if(Hubs[j]>d1){
LRn[j].second+=1;
}
}
}
int mult=1;
for(int i=0;i<Hubs.size();i++){
if(LRn[i].first>N/2 || LRn[i].second>N/2 || N-LRn[i].first-LRn[i].second>N/2){
mult=-1;
}
}
return R*mult;
}