HDU 1007 Quoit Design

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1007

题目大概没怎么读懂= =。。但是题意抽象出来的话就是求n个点中最短距离的两个点为直径的圆的半径。

因为n最大可取10^5,所以O(n^2)的暴力算法肯定是无法通过的,所以选择采用分治的O(nlogn)的算法。然后。。貌似就没什么然后了,只剩下模版的练习了

#include
#include
#include
#include
using namespace std;
#define MIN(a,b) ((a>1;
    double ans;
    ans=min(mindis(l,mid),mindis(mid+1,r));
    int count=0;
    for(int i=l;i<=r;i++){
        if(fabs(points[mid].x-points[i].x)<=ans)
            a[count++]=i;
    }
    sort(a,a+count,cmpy);
    for(int i=0;ians)  break;
            ans=min(ans,dis(points[a[i]],points[a[j]]));
        }
    }
    return ans;
}
int main(){
    while(~scanf("%d",&n)&&n){
        for(int i=0;i


转载于:https://www.cnblogs.com/gaoxiang36999/p/4451525.html

你可能感兴趣的:(HDU 1007 Quoit Design)