标签:div printf between conf man test pre radius return
InputThe input consists of several test cases. For each case, the first line contains an integer N (2 <= N <= 100,000), the total number of toys in the field. Then N lines follow, each contains a pair of (x, y) which are the coordinates of a toy. The input is terminated by N = 0.
OutputFor each test case, print in one line the radius of the ring required by the Cyberground manager, accurate up to 2 decimal places.
Sample Input
2 0 0 1 1 2 1 1 1 1 3 -1.5 0 0 0 0 1.5 0
Sample Output
0.71 0.00 0.75
#include<iostream> #include<algorithm> #include<cmath> using namespace std; const int maxn=1e5+5; int a[maxn]; struct node { double x,y; }p[maxn]; double dis(node a,node b) { return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); } bool cmpx(node a,node b) { return a.x<b.x; } bool cmpy(int a,int b) { return p[a].y<p[b].y; } double find(int l,int r) { if(l+1==r) return dis(p[l],p[r]); int mid=(l+r)/2; double ans=min(find(l,mid),find(mid,r)); int cnt=0; for(int i=l;i<=r;i++) { if(fabs(p[i].x-p[mid].x)<=ans) a[cnt++]=i; } sort(a,a+cnt,cmpy); for(int i=0;i<cnt-1;i++) { for(int j=i+1;j<cnt;j++) { if(p[a[j]].y-p[a[i]].y>=ans) break; ans=min(ans,dis(p[a[i]],p[a[j]])); } } return ans; } int main() { int n; while(cin>>n,n) { for(int i=0;i<n;i++) scanf("%lf%lf",&p[i].x,&p[i].y); sort(p,p+n,cmpx); printf("%.2lf\n",find(0,n-1)/2); } return 0; }
HDU 1007 Quoit Design (最近点对 分治法)
标签:div printf between conf man test pre radius return
原文地址:http://www.cnblogs.com/orion7/p/7249759.html