Submission #167686

#TimeUsernameProblemLanguageResultExecution timeMemory
167686tinjyuCircle selection (APIO18_circle_selection)C++14
7 / 100
3051 ms32852 KiB
#include <iostream>
#include <cmath>
using namespace std;
long long int k[300005],n,x[500005],y[500005],ri[500005],id[500005],tmp[500005][4],tag[500005],ans[500005];
int qs(int s,int e)
{
	int l=s,mid=(s+e)/2,r=mid+1,p=l;
	if(mid>s)qs(s,mid);
	if(e>mid+1)qs(mid+1,e);
	while(l<=mid && r<=e)
	{
		if(ri[l]>ri[r] || (ri[l]==ri[r] && id[l]<id[r]))
		{
			tmp[p][0]=x[l];
			tmp[p][1]=y[l];
			tmp[p][2]=ri[l];
			tmp[p][3]=id[l];
			l++;
			p++;
		}
		else
		{
			tmp[p][0]=x[r];
			tmp[p][1]=y[r];
			tmp[p][2]=ri[r];
			tmp[p][3]=id[r];
			r++;
			p++;
		}
	}
	while(l<=mid)
	{
		tmp[p][0]=x[l];
		tmp[p][1]=y[l];
		tmp[p][2]=ri[l];
		tmp[p][3]=id[l];
		l++;
		p++;
	}
	while(r<=e)
	{
		tmp[p][0]=x[r];
		tmp[p][1]=y[r];
		tmp[p][2]=ri[r];
		tmp[p][3]=id[r];
		p++;
		r++;
	}
	
	for(int i=s;i<=e;i++)
	{
		x[i]=tmp[i][0];
		y[i]=tmp[i][1];
		ri[i]=tmp[i][2];
		id[i]=tmp[i][3];
	}
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>x[i]>>y[i]>>ri[i];
		id[i]=i;
	}
	qs(1,n);
	for(int i=1;i<=n;i++)
	{
		if(tag[i]==1)continue;
		ans[id[i]]=id[i];
		tag[i]=1;
		for(int j=1;j<=n;j++)
		{
			if(tag[j]==1 || sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]))>(ri[i]+ri[j]))continue;
			ans[id[j]]=id[i];
			tag[j]=1;
		}
	}
	for(int i=1;i<=n;i++)cout<<ans[i]<<" ";
}

Compilation message (stderr)

circle_selection.cpp: In function 'int qs(int, int)':
circle_selection.cpp:57:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
#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...