제출 #1243519

#제출 시각아이디문제언어결과실행 시간메모리
1243519moondarksideTowns (IOI15_towns)C++20
25 / 100
9 ms328 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; }
#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...