Quoit Design

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 28539    Accepted Submission(s): 7469

Problem Description
Have you ever played quoit in a playground? Quoit is a game in which flat rings are pitched at some toys, with all the toys encircled awarded.

In the field of Cyberground, the position of each toy is fixed, and the ring is carefully designed so it can only encircle one toy at a time. On the other hand, to make the game look more attractive, the ring is designed to have the largest radius. Given a
configuration of the field, you are supposed to find the radius of such a ring.



Assume that all the toys are points on a plane. A point is encircled by the ring if the distance between the point and the center of the ring is strictly less than the radius of the ring. If two toys are placed at the same point, the radius of the ring is considered
to be 0.
 
Input
The 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.
 
Output
For 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
 
Author
CHEN, Yue
 
题目:

pid=1007">hdu 1007     。      zoj  2107



这道题。类型:求近期点对。

求平面 近期点对的方法。就是分治法。

先将点分成两个区间,如果S1。S2,然后分别求S1内近期点对的点d1,S2内近期点对的点d2
再求S1与S2内近期点对 d=min(d1,d2)
可是。不能忘记,近期点对可能是 一个点在S1一个点在S2。
接下来就是比較精华的部分:
所求的点的位置,一定在于  mid-d,mid+d 之间。

然后。就在这个区间開始找点,并不断更新d值,最后就能够得到d了。

这道题,终于要求半径,所以还要除以2。

/**************************************
***************************************
* Author:Tree *
*From :http://blog.csdn.net/lttree *
* Title : Quoit Design *
*Source: hdu 1007 zoj 2107 *
* Hint : 计算几何——近期点对 *
***************************************
**************************************/
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
#define N 100001
struct Point
{
double x,y;
}p[N];
int arr[N];
double Min(double a,double b)
{
return a<b?a:b;
}
// 求两点之间的距离
double dis(Point a,Point b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
// 依据点横坐标or纵坐标排序
bool cmp_y( int a,int b)
{
return p[a].y<p[b].y;
}
bool cmp_x( Point a,Point b)
{
return a.x<b.x;
}
// 求近期点对
double close_pair( int l,int r )
{
// 推断两个点和三个点的情况
if( r==l+1 ) return dis( p[l],p[r] );
else if( r==l+2 ) return Min( dis(p[l],p[r]),Min( dis(p[l],p[l+1]),dis(p[l+1],p[r]) ) ); int mid=(l+r)>>1;
double ans=Min(close_pair(l,mid),close_pair(mid+1,r)); int i,j,cnt=0;
// 假设 当前p[i]点 横坐标位于 范围(中点横坐标-ans,中点横坐标+ans)位置内,则记录点的序号
for(i=l; i<=r; ++i)
if( p[i].x>=p[mid].x-ans && p[i].x<=p[mid].x+ans )
arr[cnt++]=i;
// 依照纵坐标由小到大 对于arr数组内点进行排序
sort(arr,arr+cnt,cmp_y);
for(i=0; i<cnt; i++)
for(j=i+1; j<cnt; j++)
{
if(p[arr[j]].y-p[arr[i]].y>=ans) break;
ans=Min(ans,dis(p[arr[i]],p[arr[j]]));
} return ans;
} int main()
{
int i,n;
while( scanf("%d",&n)!=EOF && n)
{
for(i=0;i<n;++i)
scanf("%lf%lf",&p[i].x,&p[i].y);
// 先将全部点依照横坐标由小到大排序
sort(p,p+n,cmp_x);
printf("%.2lf\n",close_pair(0,n-1)/2.0);
}
return 0;
}


ACM-计算几何之Quoit Design——hdu1007 zoj2107的更多相关文章

  1. Quoit Design(hdu1007)最近点对问题。模版哦!

    Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...

  2. HDU1007 Quoit Design 【分治】

    Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  3. HDU 1007 Quoit Design【计算几何/分治/最近点对】

    Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  4. HDU1007 Quoit Design掷环游戏

    Quoit Design 看懂题意以后发现就是找平面最近点对间距离除以2. 平面上最近点对是经典的分治,我的解析 直接上代码 #include<bits/stdc++.h> using n ...

  5. Quoit Design(hdu1007)

    ---恢复内容开始--- Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Ja ...

  6. ACM计算几何题目推荐

    //第一期 计算几何题的特点与做题要领: 1.大部分不会很难,少部分题目思路很巧妙 2.做计算几何题目,模板很重要,模板必须高度可靠. 3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面 ...

  7. Quoit Design(最近点对+分治)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1007 Quoit Design Time Limit: 10000/5000 MS (Java/Oth ...

  8. HDU 1007 Quoit Design(经典最近点对问题)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1007 Quoit Design Time Limit: 10000/5000 MS (Java/Oth ...

  9. HDU 1007 Quoit Design(二分+浮点数精度控制)

    Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

随机推荐

  1. cocos2d-x2.0 win7第一次创建项目需要调用到的脚本(不断更新维护)//cocos2d-x 教程一

    第一步: 最新的cocos2d-x.下载地址https://github.com/cocos2d/cocos2d-x github上最新的引擎,值得注意的是官网上发布的引擎是稳定版.选择哪种就看个人喜 ...

  2. hihocoder1302 最长回文子串

    hihocoder1302 最长回文子串 先贴代码 所有的上面的提示已经交代的好清楚了…… #include <iostream> #include <cstring> #in ...

  3. HDU1257 最小拦截系统 【贪婪】

    最小拦截系统 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  4. MIPI CSI-2规范一——概述及层级

    MIPI CSI-2规范一——概述及层级 CSI-2概述 CSI-2规范定义了发送者和接收者之间传输和控制接口的标准数据.数据传输接口(指CSI-2)是单向差分串行接口,传输数据和始终信号:接口的物理 ...

  5. 初入Android--环境搭建

    Android SDK 可以下载adt-bundle:包含了装好插件的eclipse和android sdk.下载好后,首先设置ANDROID_HOME环境变量:ANDROID_HOME=/home/ ...

  6. Windows Azure入门教学系列 (四):使用Blob Storage

    本文将会介绍如何使用Blob Storage.Blob Storage可以看做是云端的文件系统.与桌面操作系统上不同,我们是通过REST API来进行对文件的操作.有关REST API的详细信息,请参 ...

  7. 基于visual Studio2013解决面试题之0704判断牌是否顺子

     题目

  8. linux安装Eclipse c++环境

    yum install eclipse     yum install eclipse-cdt

  9. Microsoft office PPT 2007 保存时速度慢(整理自网上)

    问题描述: XP sp3上运行PPT2007,当需要保存文件时,发现竟然需要近1分钟才能保存完毕,其间可能会出现“瘟都死沙漏”来提示你正在保存. 这简直慢到过分慢到无法容忍,一开始以为是ppt文件过大 ...

  10. Swift - 给表格添加移动单元格功能(拖动行)

    1,下面的样例是给表格UITableView添加单元格移动功能: (1)给表格添加长按功能,长按后表格进入编辑状态  (2)在编辑状态下,可以看到单元格后面出现拖动按钮  (3)鼠标按住拖动按钮,可以 ...