平面最远点对
迭代大法好
#include<cstdio> #include<iostream> #include<algorithm> #include<cmath> const int maxn = 50010; int x[maxn],y[maxn],ans; inline int sqr(int x){return x*x;} inline int dis(int a,int b){return sqr(x[a]-x[b])+sqr(y[a]-y[b]);} inline void up(int&a,int b){if(a<b)a=b;} int n; int main(){ std::ios::sync_with_stdio(false),std::cin.tie(0); std::cin >> n; for(int i=1;i<=n;++i)std::cin >> x[i] >> y[i]; for(int i=1;i<=100;++i){ int s=rand()%n+1,t=5; while(t--){ int to=rand()%n+1; for(int j=1;j<=n;++j) if(dis(s,j) > dis(s,to)) to = j; up(ans,dis(s,to)),s=to; } } std::cout << ans << '\n'; }