HDU1007.Quoit Design
-- 点我 --
题目大意 :给你一堆点,求一个最小圆能够覆盖两个点的半径(最近两点距离的一半);
最多100000个点,暴力即O(n^2)会超时,考虑二分,先求左边最短距离dl,右边dr, 和一个点左, 一个点在右的情况, 求d;
#include<bits/stdc++.h> using namespace std; #define lint long long
#define maxn 100005
#define mod 1e9+7 struct point
{
double x, y;
}; int n;
point a[maxn];
vector<point> rp, lp; bool cmpx(point a, point b)
{
return a.x == b.x? a.y < b.y: a.x < b.x;
} bool cmpy(point a, point b)
{
return a.y == b.y? a.x < b.x: a.y < b.y;
} double dis(point a ,point b)
{
return sqrt(pow(a.x - b.x , )+pow(a.y - b.y, ));
} double solver(int l, int r)
{
if(r - l == ) return dis(a[l], a[r]);
else if(l == r) return ;
int mid = (l+r) >> ;
double d = min(solver(l, mid), solver(mid+, r));
lp.clear(); rp.clear(); for(int i = l; i <= mid; i++)
if(a[mid].x - a[i].x <= d)
lp.push_back(a[i]); for(int i = mid+; i <= r; i++)
if(a[i].x - a[mid].x < d)
rp.push_back(a[i]); sort(rp.begin(), rp.end(), cmpy);
for(int i = ; i < lp.size(); i++)
for(int j = ; j < rp.size(); j++)
{
if(fabs(rp[j].y - lp[i].y) < d) d = min(dis(rp[j], lp[i]), d);
if(rp[j].y - lp[i].y >= d) break;
} return d; } int main()
{
int n;
cin >> n;
while(n)
{
for(int i = ; i <= n; i++)
scanf("%lf%lf", &a[i].x,&a[i].y);
sort(a+, a+n+, cmpx);
double d = solver(, n)/;
printf("%.2lf\n", d);
cin >> n;
} }
HDU1007.Quoit Design的更多相关文章
- HDU1007 Quoit Design 【分治】
Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- HDU1007 Quoit Design掷环游戏
Quoit Design 看懂题意以后发现就是找平面最近点对间距离除以2. 平面上最近点对是经典的分治,我的解析 直接上代码 #include<bits/stdc++.h> using n ...
- (hdu1007)Quoit Design,求最近点对
Problem Description Have you ever played quoit in a playground? Quoit is a game in which flat rings ...
- HDU-1007 Quoit Design 平面最近点对
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1007 简单裸题,测测模板,G++速度快了不少,应该是编译的时候对比C++优化了不少.. //STATU ...
- ACM-计算几何之Quoit Design——hdu1007 zoj2107
Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- Quoit Design(hdu1007)最近点对问题。模版哦!
Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- Quoit Design(hdu1007)
---恢复内容开始--- Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- HDU 1007 Quoit Design(二分+浮点数精度控制)
Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- 杭电OJ——1007 Quoit Design(最近点对问题)
Quoit Design Problem Description Have you ever played quoit in a playground? Quoit is a game in whic ...
随机推荐
- quartz定时任务cron表达式详解
引用:https://www.cnblogs.com/lazyInsects/p/8075487.html cron表达式用于配置cronTrigger的实例.cron表达式实际上是由七个子表达式组成 ...
- 20165225《Java程序设计》第八周学习总结
20165225<Java程序设计>第八周学习总结 1.视频与课本中的学习: 第十二章学习总结 1.继承Thread类创建线程,程序中如果想要获取当前线程对象可以使用方法:Thread.c ...
- 使用eclipse自动生成WSDL客户端代码
一.获取WSDL文件 从网上可以搜到一些提供各种服务的免费接口,比如获取天气预报的接口: http://www.webxml.com.cn/WebServices/WeatherWebService. ...
- kali蓝牙连接
http://blog.csdn.net/hailangnet/article/details/47723181 http://www.aiuxian.com/article/p-3012084.ht ...
- 去除html
/// <summary> /// 将HTML去除 /// </summary> /// <param name="Htmlstring">&l ...
- python显示进度条
当一个python任务是需要逐个处理相同的事物时(里面有循环操作,例如对一系列的文件进行处理),这时可以将处理的进度条加进来,下面是一个例子: import time import sys def v ...
- python-面向对象-04_面向对象封装案例
面向对象封装案例 目标 封装 小明爱跑步 存放家具 01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对 ...
- centos7.6删除重新安装python和yum
最近在开发一个项目时出现了错误,需要重新安装python和yum,怎么安装呢?随ytkah一起来看看吧.ytkah用的linux分支的centos7.6,各位朋友在下载源的时候要注意版本的区分.现在开 ...
- RN 获取地理位置
代码: export default class GeolocationView extends Component { watchID: number; constructor(props){ su ...
- RN picker使用
这里是只有苹果的,如果想适配andorid,可以在showPickerFun方法里面使用platefrom判断 代码: import React, {Component} from 'react'; ...