我用排序 x 过了加强版,现在又用排序 x * x + y * y 过了加强加强版……
#include<bits/stdc++.h>
using namespace std;
int n;
struct Node{
int x,y;
} node[400010];
long long mins=1e18;
bool cmp(Node a,Node b){
return (long long)a.x*a.x+(long long)a.y*a.y<(long long)b.x*b.x+(long long)b.y*b.y;
}
long long disx(int a,int b){
return (long long)(node[a].x-node[b].x)*(node[a].x-node[b].x);
}
long long disy(int a,int b){
return (long long)(node[a].y-node[b].y)*(node[a].y-node[b].y);
}
long long dis(int a,int b){
return disx(a,b)+disy(a,b);
}
int main(){
scanf("%d",&n);
for(register int i=1;i<=n;i++) scanf("%d%d",&node[i].x,&node[i].y);
sort(node+1,node+n+1,cmp);
for(register int i=1;i<n;i++){
for(register int j=i+1;j<=i+50&&j<=n;j++) mins=min(mins,dis(i,j));
}
printf("%lld",mins);
return 0;
}