Submission #734842

#TimeUsernameProblemLanguageResultExecution timeMemory
734842keisuke6Circle selection (APIO18_circle_selection)C++14
23 / 100
2391 ms289064 KiB
#include <bits/stdc++.h> using namespace std; #define int long long signed main(){ int N; cin>>N; vector<int> X(N),Y(N),R(N); for(int i=0;i<N;i++){ cin>>X[i]>>Y[i]>>R[i]; X[i] += (int)(1e9)+2*R[i]; Y[i] += (int)(1e9)+2*R[i]; } vector<int> A(N,N+1); vector<pair<int,int>> S(N); for(int i=0;i<N;i++) S[i] = {R[i],N-1-i}; sort(S.rbegin(),S.rend()); int n = ((int)(2e18)/(2*R[0]))+10; map<int,set<int>> m; vector<int> I(N); for(int i=0;i<N;i++){ m[X[i]/(2*R[0])*n+Y[i]/(2*R[i])].insert(i); I[i] = X[i]/(2*R[0])*n+Y[i]/(2*R[i]); } for(int i=0;i<N;i++){ int ind = N-1-S[i].second; if(A[ind] != N+1) continue; int pos = I[ind]; vector<int> T = {}; for(int x:m[pos]){ if((X[ind]-X[x])*(X[ind]-X[x])+(Y[ind]-Y[x])*(Y[ind]-Y[x]) <= (R[ind]+R[x])*(R[ind]+R[x])){ T.push_back(x); A[x] = ind+1; } } for(int x:m[pos+1]){ if((X[ind]-X[x])*(X[ind]-X[x])+(Y[ind]-Y[x])*(Y[ind]-Y[x]) <= (R[ind]+R[x])*(R[ind]+R[x])){ T.push_back(x); A[x] = ind+1; } } for(int x:m[pos-1]){ if((X[ind]-X[x])*(X[ind]-X[x])+(Y[ind]-Y[x])*(Y[ind]-Y[x]) <= (R[ind]+R[x])*(R[ind]+R[x])){ T.push_back(x); A[x] = ind+1; } } for(int x:m[pos+n]){ if((X[ind]-X[x])*(X[ind]-X[x])+(Y[ind]-Y[x])*(Y[ind]-Y[x]) <= (R[ind]+R[x])*(R[ind]+R[x])){ T.push_back(x); A[x] = ind+1; } } for(int x:m[pos+n+1]){ if((X[ind]-X[x])*(X[ind]-X[x])+(Y[ind]-Y[x])*(Y[ind]-Y[x]) <= (R[ind]+R[x])*(R[ind]+R[x])){ T.push_back(x); A[x] = ind+1; } } for(int x:m[pos+n-1]){ if((X[ind]-X[x])*(X[ind]-X[x])+(Y[ind]-Y[x])*(Y[ind]-Y[x]) <= (R[ind]+R[x])*(R[ind]+R[x])){ T.push_back(x); A[x] = ind+1; } } for(int x:m[pos-n]){ if((X[ind]-X[x])*(X[ind]-X[x])+(Y[ind]-Y[x])*(Y[ind]-Y[x]) <= (R[ind]+R[x])*(R[ind]+R[x])){ T.push_back(x); A[x] = ind+1; } } for(int x:m[pos-n+1]){ if((X[ind]-X[x])*(X[ind]-X[x])+(Y[ind]-Y[x])*(Y[ind]-Y[x]) <= (R[ind]+R[x])*(R[ind]+R[x])){ T.push_back(x); A[x] = ind+1; } } for(int x:m[pos-n-1]){ if((X[ind]-X[x])*(X[ind]-X[x])+(Y[ind]-Y[x])*(Y[ind]-Y[x]) <= (R[ind]+R[x])*(R[ind]+R[x])){ T.push_back(x); A[x] = ind+1; } } for(int y:T) m[I[y]].erase(y); } for(int i=0;i<N;i++) cout<<A[i]<<' '; cout<<endl; }
#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...