Beauty Contest

平面最远点对

迭代大法好

#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';
}

猜你喜欢

转载自www.cnblogs.com/skip1978/p/10333618.html