Submission #1356108

#TimeUsernameProblemLanguageResultExecution timeMemory
1356108javkhlantogs원 고르기 (APIO18_circle_selection)C++20
0 / 100
618 ms56216 KiB
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll dist(ll x1,ll y1,ll x2,ll y2){
	return (x2-x1)*(x2-x1)+(y2-y1)*(y2-y1);
}
int main(){
	ll n,i,j,k,q;
	cin>>n;
	vector<vector<ll>> c(n,vector<ll>(3));
	vector<ll> ans(n+1),nearest(n+1);
	set<vector<ll>> st;
	for(i=0 ; i<n ; i++) cin>>c[i][0]>>c[i][1]>>c[i][2];
	if(n==1){
		cout<<1<<"\n";
		return 0;
	}
	sort(c.begin(),c.end());
	for(i=0 ; i<n ; i++){
		st.insert({-c[i][2],i,c[i][0],c[i][1]});
		ll d=4e18;
		for(j=i+1 ; j<n ; j++){
			ll dx=c[j][0]-c[i][0];
			if(dx*dx>=d) break;
			if(dist(c[j][0],c[j][1],c[i][0],c[i][1])<d){
				d=dist(c[j][0],c[j][1],c[i][0],c[i][1]);
				nearest[i]=j;
			}
		}
		for(j=i-1 ; j>=0 ; j--){
			ll dx=c[j][0]-c[i][0];
			if(dx*dx>=d) break;
			if(dist(c[j][0],c[j][1],c[i][0],c[i][1])<d){
				d=dist(c[j][0],c[j][1],c[i][0],c[i][1]);
				nearest[i]=j;
			}
		}
	}
	while(st.size()){
		vector<ll> x=*(st.begin());
		ll u=x[1],v=nearest[x[1]];
		ans[u+1]=u+1;
		st.erase(st.begin());
		if(dist(c[u][0],c[u][1],c[v][0],c[v][1])<=c[u][2]+c[v][2]){
			ans[v+1]=u+1;
			st.erase({-c[v][2],v,c[v][0],c[v][1]});
		}
	}
	for(i=1 ; i<=n ; i++) cout<<ans[i]<<" ";
	return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...