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 ...
随机推荐
- DbGridEh中改变行的颜色
DbGridEh中改变行的颜色 代码也挺简单的,只是当时没有想到: if ds2.FieldByName('AutoRead').AsInteger=0 thenbegin DBGridEh1.Ca ...
- ubuntu物理机上搭建Kubernetes集群 -- 准备
准备工作 1.kubernetes架构 2.三台ubuntu主机: 操作系统:ubuntu-16.04.1-server-amd64 docker: 1.安装 使用命令 sudo apt-get in ...
- js正则表达式:学习网址和部分正则验证
https://www.cnblogs.com/chenmeng0818/p/6370819.html ① 不以0开头的多个数字,但可以是单个0,必须为数字,位数不允许超过10个. var reg=/ ...
- 深入理解Java虚拟机笔记
1. Java虚拟机所管理的内存 2. 对象创建过程 3. GC收集 4. HotSpot算法的实现 5. 垃圾收集器 6. 对象分配内存与回收细节 7. 类文件结构 8. 虚拟机类加载机制 9.类加 ...
- LongAdder,AtomicIntegerFieldUpdater深入研究
从LongAdder看更高效的无锁实现 AtomicIntegerFieldUpdater字段原子更新类 div:not([id]){display:none;} --> ul{padding: ...
- jvm - 类的初始化过程
我们知道,我们写的java代码称为源码,想要能够被jvm执行首先需要编译成.class文件,那么编译完到使用又都经理的哪些阶段呢?主要分为以下三个阶段: 加载:查找并加载类的二进制数据(.class文 ...
- Android 7.0下,拍摄照片报错
对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file:// URI.如果一项包含文件 URI 的 intent 离开 ...
- Spring Hibernate Transaction示例
JDBCDAO.java package com.bf; import java.sql.ResultSet; import java.sql.SQLException; import java.ut ...
- maven 详解二
转自 http://www.cnblogs.com/whgk/p/7121336.html 前一节我们明白了maven是个什么玩意,这一节就来讲讲他的一个重要的应用场景,也就是通过maven将一个ss ...
- Fiddler 手机抓包设置
IOS 为例 1. Fiddler -> Tools -> Options ->Connection 2. 手机 Settings -> WIFI ->设置当前连接的网络 ...