Submission #1313639

#TimeUsernameProblemLanguageResultExecution timeMemory
1313639activedeltorreTowns (IOI15_towns)C++20
61 / 100
9 ms456 KiB
#include "towns.h" using namespace std; #include <map> #include <cmath> #include <algorithm> #include <iostream> #include <vector> int rez[225][5]; int distdiam[225]; int getmax(int n,int b,int id) { int best=-1,can=0; for(int i=0; i<n; i++) { rez[i][id]=getDistance(b,i); if(rez[i][id]>best) { best=rez[i][id]; can=i; } } return can; } map<int,int>mp; map<int,vector<int>>noduri; int majoritar(vector<int>vec,int nmax) { int can=vec[0],off=1; for(int i=1; i<vec.size(); i++) { if(getDistance(can,vec[i])==distdiam[can]+distdiam[vec[i]]) { off--; if(off<0) { can=vec[i]; off=1; } } else { off++; } } off=0; for(int i=0; i<vec.size(); i++) { if(getDistance(can,vec[i])!=distdiam[can]+distdiam[vec[i]]){ off++; } } if(off>nmax) { return 1; } return 0; } int hubDistance(int N, int sub) { mp.clear(); noduri.clear(); int d1=getmax(N,1,0); int d2=getmax(N,d1,1); int d3=getmax(N,d2,2); int dab=rez[d2][1]; int minim=1000000000; for(int i=0; i<N; i++) { if(i!=d1 && i!=d2) { int distodim=(rez[i][1]+rez[i][2]-dab)/2; distdiam[i]=distodim; int x=(rez[i][1]-distodim); int y=(rez[i][2]-distodim); int diff=x-y; mp[diff]++; noduri[diff].push_back(i); minim=min(minim,abs(diff)); } } int prefix=1; int semn=-1; int r=(dab+minim)/2; int nmax=N/2; for(auto it:mp) { if(abs(it.first)==(minim)) { if(it.second<=nmax && prefix<=nmax && N-prefix-it.second<=nmax) { semn=1; } else if(sub!=2 && sub!=4 && prefix<=nmax && N-prefix-it.second<=nmax) { if(majoritar(noduri[it.first],nmax)==0) { semn=1; } } } prefix=prefix+it.second; noduri[it.first].clear(); } noduri.clear(); return r*semn; }
#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...