Submission #982376

#TimeUsernameProblemLanguageResultExecution timeMemory
982376Muhammad_AneeqCircle selection (APIO18_circle_selection)C++17
7 / 100
3084 ms49120 KiB
/* بسم الله الرحمن الرحيم Author: (:Muhammad Aneeq:) */ #include <iostream> #include <set> #include <vector> #include <map> #include <algorithm> using namespace std; #define int long long int man(pair<int,int>a,pair<int,int>b) { return ((a.first-b.first)*(a.first-b.first)+(a.second-b.second)*(a.second-b.second)); } inline void solve() { int n; cin>>n; pair<int,int>a[n]; bool w=0; set<pair<int,int>>s; int ra[n]={}; for (int i=0;i<n;i++) { int x,y,r; cin>>x>>y>>r; a[i]={x,y}; if (y!=0) w=1; s.insert({-r,i}); ra[i]=r; } if (w==0) { bool vis[n]={}; vector<vector<int>>f; for (int i=0;i<n;i++) f.push_back({a[i].first,ra[i],i}); sort(begin(f),end(f)); int ans[n]={}; while (s.size()) { int r=(*begin(s)).first,i=(*begin(s)).second; s.erase(*begin(s)); ans[i]=i; vector<int>z={a[i].first,ra[i],i}; int ind=lower_bound(begin(f),end(f),z)-begin(f); vis[ind]=1; for (int j=ind+1;j<n;j++) { if (vis[j]) break; int z=f[j][0]-f[ind][0]; if (z<=abs(r)+abs(f[j][1])) { s.erase({-f[j][1],f[j][2]}); vis[j]=1; ans[f[j][2]]=i; } else break; } for (int j=ind-1;j>=0;j--) { if (vis[j]) break; int z=f[j][0]-f[ind][0]; if (z<=abs(r)+abs(f[j][1])) { s.erase({-f[j][1],f[j][2]}); vis[j]=1; ans[f[j][2]]=i; } else break; } } for (auto i:ans) cout<<i+1<<' '; cout<<endl; return; } else { int ans[n]={}; while (s.size()) { int r=(*begin(s)).first,i=(*begin(s)).second; s.erase(*begin(s)); ans[i]=i; vector<pair<int,int>>z; for (auto [r1,j]:s) { int dis=man(a[i],a[j]); if (dis<=((r+r1)*(r+r1))) z.push_back({r1,j}); if (z.size()&&n>5000) break; } for (auto j:z) { ans[j.second]=i; s.erase(j); } } for (auto i:ans) cout<<i+1<<' '; cout<<endl; } } signed main() { ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); solve(); }
#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...