TLE 116pts 求调
查看原帖
TLE 116pts 求调
774188
ClearluvXL楼主2024/11/27 21:59
#include<bits/stdc++.h>
#define endl '\n'
#define reg register
#define x first
#define y second

using namespace std;

typedef long long ll;
typedef pair<int,int> pii;

const int N=4e5+10;
const int INF=0x3f3f3f3f;

int n;
pii a[N];

ll dis(pii i,pii j){
	ll x=i.x-j.x;
	ll y=i.y-j.y;
	return 1ll*x*x+1ll*y*y; 
}//end

pii tp[N];

ll solve(int l,int r){
	if(l==r) return 1e18;
	if(l+1==r) return dis(a[l],a[r]);
	int mid=l+r>>1;
	ll lans=solve(l,mid);
	ll rans=solve(mid+1,r);
	
	ll minans=min(lans,rans);
	
	int cnt=0;
	
	for(reg int i=l;i<=r;i++){
		ll x=abs(a[i].x-a[mid].x);
		if(x*x<minans){
			tp[++cnt]=a[i];	
		}
	}
	
	sort(tp+1,tp+cnt+1);
	
	for(reg int i=1;i<=cnt;i++){
		for(reg int j=i+1;j<=cnt;j++){
			ll x=abs(tp[i].x-tp[j].x);
			if(x*x>=minans) break;
			if(dis(tp[i],tp[j])<minans){
				minans=dis(tp[i],tp[j]);
			}
		}
	}
	
	return minans;
}//end

int main(){	
//	freopen("1.in","r",stdin);
	
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	cin>>n;
	for(reg int i=1;i<=n;i++){
		int x,y; cin>>x>>y;
		a[i]={x,y};
	}
	
	sort(a+1,a+n+1);
	
	cout<<solve(1,n)<<endl;
	
	return 0;
}//end

2024/11/27 21:59
加载中...