Submission #1316669

#TimeUsernameProblemLanguageResultExecution timeMemory
1316669PlayVoltzTowns (IOI15_towns)C++20
49 / 100
10 ms476 KiB
#include "towns.h" #include <bits/stdc++.h> using namespace std; #define pb push_back #define mp make_pair #define pii pair<int, int> #define fi first #define se second map<int, map<int, int> > mmm; int query(int a, int b){ if (a==b)return 0; if (!mmm[min(a, b)][max(a, b)])mmm[min(a, b)][max(a, b)]=getDistance(min(a, b), max(a, b))+1; return mmm[min(a, b)][max(a, b)]-1; } int hubDistance(int n, int sub){ mmm.clear(); int mx=-1, a=0, b=0, ans=INT_MAX/2, dia=0; for (int i=1; i<n; ++i)if (query(a, i)>mx)mx=query(a, i), b=i; for (int i=0; i<n; ++i)dia=max(dia, query(b, i)); vector<pii> vect; for (int i=0; i<n; ++i)vect.pb(mp((query(a, b)+query(b, i)-query(a, i))/2, i)), ans=min(ans, max(vect.back().fi, dia-vect.back().fi)); sort(vect.begin(), vect.end()); for (int i=0; i<n; ++i)if (max(vect[i].fi, dia-vect[i].fi)==ans){ int l=i, r=i, d=vect[i].fi, c=0, count=0, sz=0; while (r+1<n&&vect[r+1].fi==d)++r; if (l>n/2||n-r-1>n/2)continue; for (int j=l; j<=r; ++j){ if (!count)count=1, c=vect[j].se; else if (query(vect[j].se, c)!=query(b, vect[j].se)+query(b, c)-2*d)++count; else --count; } for (int j=l; j<=r; ++j)if (query(vect[j].se, c)!=query(b, vect[j].se)+query(b, c)-2*d)++sz; if (sz<=n/2)return ans; i=r; } return -ans; }
#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...