Elairin176 @ 2022-12-29 11:13:26
#include <iostream>
#include <algorithm>
using namespace std;
struct pos{
long long x;
long long y;
}a[400400];
inline long long dis(long long _x1,long long _y1,long long _x2,long long _y2){
return (_x2-_x1)*(_x2-_x1)+(_y2-_y1)*(_y2-_y1);
}
inline long long min(long long a,long long b){
return a<b?a:b;
}
bool cmp(pos a,pos b){
return a.x*a.x+a.y*a.y>b.x*b.x+b.y*b.y;
}
long long ans=1e18;
int n;
int main(void){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i].x>>a[i].y;
}
sort(a,a+n,cmp);
for(int i=1;i<n;i++){
for(int j=-100;j<=100;j++){
if(j==0){
j++;
}
if(i+j<0||i+j>=n){
if(j>0){
break;
}
continue;
}
ans=min(ans,dis(a[i+j].x,a[i+j].y,a[i].x,a[i].y));
}
}
cout<<ans;
}
以上代码用排序轻松 AC 了本题。
这题的正解是分治,但是依旧卡了过去,所以请求加强数据。
by Elairin176 @ 2022-12-29 11:13:55
@小粉兔 @dottle @览遍千秋
by liangbowen @ 2022-12-29 11:19:04
这玩意卡掉还是有一点点难的,建议给组hack数据。
《平面最近点对(加强加强加强版)》
by Elairin176 @ 2022-12-29 11:24:10
@liangbowen 找lxl
by ran_qwq @ 2023-01-08 14:02:00
@LxlDuLiu
by XSJProgrammer @ 2023-11-05 10:04:06
人类智慧