Submission #982236

#TimeUsernameProblemLanguageResultExecution timeMemory
982236Faisal_SaqibCircle selection (APIO18_circle_selection)C++17
22 / 100
1540 ms1048576 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const int N=3e5+100; const int SQ=222;// 333 444 vector<int> adj[N]; ll who[N]; void solve() { ll n; cin>>n; vector<ll> x(n),y(n),r(n); for(int i=0;i<n;i++) cin>>x[i]>>y[i]>>r[i]; if((n<=5000)) { for(int i=0;i<n;i++) { for(int j=0;j<=i;j++) { // ( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) ) <= (r1+r2)² ll dist=(r[i]+r[j])*(r[i]+r[j]); ll dp=( (x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]) ); if(dp<=dist) { adj[i].push_back(j); adj[j].push_back(i); } } } set<pair<int,int>> rem; for(int i=0;i<n;i++) rem.insert({-r[i],i}); while(rem.size()) { auto p=*begin(rem); rem.erase(begin(rem)); if(who[p.second]!=0) continue; for(auto op:adj[p.second]) if(who[op]==0) who[op]=p.second+1; } for(int i=0;i<n;i++) { cout<<who[i]<<' '; } cout<<'\n'; } else { vector<pair<ll,ll>> tp(n); for(int i=0;i<n;i++) { tp[i].first=x[i]; tp[i].second=i; } sort(begin(tp),end(tp)); for(int jp=0;jp<n;jp++) { for(int l=-SQ;l<=SQ;l++) { if((jp+l)>=0 and (jp+l)<n) { int i=tp[jp].second; int j=tp[jp+l].second; ll dist=(r[i]+r[j])*(r[i]+r[j]); ll dp=( (x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]) ); if(dp<=dist) { adj[i].push_back(j); adj[j].push_back(i); } } } } for(int i=0;i<n;i++) { tp[i].first=y[i]; tp[i].second=i; } sort(begin(tp),end(tp)); for(int jp=0;jp<n;jp++) { for(int l=-SQ;l<=SQ;l++) { if((jp+l)>=0 and (jp+l)<n) { int i=tp[jp].second; int j=tp[jp+l].second; ll dist=(r[i]+r[j])*(r[i]+r[j]); ll dp=( (x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]) ); if(dp<=dist) { adj[i].push_back(j); adj[j].push_back(i); } } } } set<pair<int,int>> rem; for(int i=0;i<n;i++) rem.insert({-r[i],i}); while(rem.size()) { auto p=*begin(rem); rem.erase(begin(rem)); if(who[p.second]!=0) continue; for(auto op:adj[p.second]) if(who[op]==0) who[op]=p.second+1; } for(int i=0;i<n;i++) { cout<<who[i]<<' '; } cout<<'\n'; } } int main() { cin.tie(0); cout.tie(0); ios::sync_with_stdio(0); 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...