Quoit Design (白话--分治--平面点对问题)

2023-10-27

Quoit Design

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

题目描述:
给你很多点,问你最近点的距离一半是多少。
思路典型的求最近平面点对问题 , 可以采用分治法
具体的讲解巨麻烦,还请移步到 –> 分治法编程问题之最接近点对问题的算法分析
AC code:

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include <iostream>

using namespace std;
const double maxx=1e50;

int n,t;
struct node{
    double x,y;
}ss[100005];

double min(double u,double v)
{
    return u<v ? u:v;
}

bool cmp_x(node x,node y) 
{
    return x.x<y.x; 
}

bool cmp_y(node x, node y)
{
    return x.y<y.y;
}

double get_dis(node x,node y){
    return sqrt((x.x-y.x)*(x.x-y.x)+(x.y-y.y)*(x.y-y.y));
} 

double Merge(int l,int r)  
{
    if(l+1 == r) return get_dis(ss[l],ss[r]); 
    if(l+2 == r) return min(min(get_dis(ss[l],ss[r]),get_dis(ss[l],ss[l+1])),get_dis(ss[l+1],ss[r]));
    int mid = (l+r)>>1;
    double len=min(Merge(l,mid),Merge(mid+1,r));  
    int tmp = 0;node temp[100005];
    for(int i=l;i<=r;i++)
      if(len+ss[mid].x>=ss[i].x && ss[i].x-ss[mid].x<=len)
        temp[++tmp] = ss[i];
    sort(temp+1,temp+tmp+1,cmp_y);
    for(int i=1;i <= tmp;i++)
      for(int j=i+1;j <= tmp;j++)
      {
        if((temp[j].y-temp[i].y)>=len) break;
        len = min(len,get_dis(temp[j],temp[i]));
      }
    return len;
}
int main()
{
    int t;
    while(~scanf("%d",&t) && t) {
        for (int i = 1;i<=t;i++) {
            scanf("%lf %lf",&ss[i].x,&ss[i].y);
        }
        sort(ss+1,ss+1+t,cmp_x);
        double len = Merge(1,t);
        printf("%.2lf\n",len / 2);
    }
    return 0; 
}

但是到了这里我在思考一件事,既然最短距离能够求出,那么最长距离呢? 博主暂时没有解决 To Be continue;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Quoit Design (白话--分治--平面点对问题) 的相关文章

  • Chisel Tutorial(五)——Bundles与Vecs

    以下内容依据2015 7 10版的Chisel 2 2 Tutorial整理 此处的Bundles Vecs就不翻译了 免得因为翻译不准引起一些误解 童鞋们有没有好的建议 lt
  • SpringBoot+Hutool工具类Excel工具-ExcelUtil实现excel文件的导入导出

    Hutool会用的话极大了简化了操作Excel的过程 提高开发效率 废话少说上代码 excel文件导出 public void downLoadFile UserDto dto HttpServletResponse response St
  • kvm虚拟化简介

    1 KVM介绍 KVM是一个基于Linux内核的虚拟机 它属于完全虚拟化范畴 从Linux 2 6 20开始被包含在Linux内核中 KVM基于x86硬件虚拟化技术 它的运行要求Intel VT x或AMD SVM的支持 一般认为 虚拟机监
  • synchronized原理分析

    Java 高并发专题之synchronized关键字 1 synchronized作为jvm关键字有三个作用域 synchronized作用于实例方法 锁住的当前对象 只有当前对象被锁住 新new出来的对象不会被锁住 synchronize
  • 基于python+MobileNetV2算法模型实现一个图像识别分类系统

    一 目录 算法模型介绍 模型使用训练 模型评估 项目扩展 二 算法模型介绍 图像识别是计算机视觉领域的重要研究方向 它在人脸识别 物体检测 图像分类等领域有着广泛的应用 随着移动设备的普及和计算资源的限制 设计高效的图像识别算法变得尤为重要
  • 代理IP与Socks5代理:跨界电商智能爬虫的引擎与安全壁垒

    一 代理IP 智能爬虫的引擎 多地区数据采集 代理IP允许企业模拟不同地区的IP地址 轻松实现多地区数据采集 这为企业洞察全球市场需求提供了重要数据支持 规避反爬虫机制 代理IP通过随机切换IP地址 规避了网站的反爬虫机制 确保数据采集的稳
  • 7.31黄金最新行情走势分析及多空交易策略

    近期有哪些消息面影响黄金走势 黄金多空该如何研判 黄金消息面解析 上周有重磅数据美联储加息的消息 黄金受其影响波动比较频繁 总体空间40美金 但这个过程跌宕起伏 收线来看黄金在连续上涨三周后迎来一根小阴十字星线 多头动能有所减弱 上周四加息
  • 【读书笔记】Java NIO (中文版) 读书笔记

    概述 这本书讲解的一般吧 主要是讲解了 缓冲区 通道 选择器 正则表达式 字符集 主要是讲解了api的使用 以及部分系统知识 比较底层了 而且大部分都是代码的源码讲解 或者api使用的讲解 太细致了 学netty之前可以看看这个 或者两者互
  • 协同过滤推荐算法

    一 协同过滤思想简介 二 协同过滤算法原理介绍 三 基于用户的协同过滤算法描述 四 基于物品的协同过滤算法 基于物品的协同过滤算法的优缺点 一 协同过滤思想简介 协同过滤 从字面上理解 包括协同和过滤两个操作 首先我们在外出和朋友吃饭的时候
  • 【操作系统】王道考研 p54-56 文件共享、文件保护、文件系统的层次结构

    文件共享 文件保护 文件系统的层次结构 知识总览 以下是文件共享的内容 基于索引结点的共享方式 硬链接 用一个count来记录在使用这个文件的用户的个数 当用户删除文件 则用户目录的该文件目录项删除 并count 1 当count 0 则系

随机推荐

  • 安装Oracle EE

    前期 进入自己需要设置的目录 创建文件夹 文件夹授权 mkdir xxx chmod o w oracle oradata chmod 777 oracle oradata 安装ORACLE EE 1 查找镜像 docker search
  • 【Java基础】File类 IO流

    个人简介 gt 个人主页 是Lay的主页 gt 学习方向 JAVA后端开发 gt 种一棵树最好的时间是十年前 其次是现在 gt 往期文章 Java基础 面向对象进阶 二 gt 喜欢的话麻烦点点关注喔 你们的支持是我的最大动力 目录 1 Fi
  • SeetaFaceEngine安装和测试

    一 介绍 必须安装好opencv SeetaFace人脸识别引擎包括了搭建一套全自动人脸识别系统所需的三个核心模块 即 人脸检测模块SeetaFace Detection 面部特征点定位模块SeetaFace Alignment以及人脸特征
  • FRR编译及配置(旧版)

    本文最新状态可点击查看https turbock79 cn p 334 CSDN可点击查看https blog csdn net turbock article details 107039031 爬坑 本文基于官方文档进行编译 发现构建文
  • (详解)Vue3自定义指令

    目录 一 背景 二 提前预习 必看 2 1自定义指令生命周期 2 2 生命周期四个参数 三 自定义指令 3 1私有自定义指令 3 1 1定义指令 3 1 2使用自定义指令 3 2全局自定义指令 3 2 1定义指令 3 2 2使用自定义指令
  • iconfont 使用规则

    使用iconfont可以替代普通的单色小图标 无法替代有层次 渐变或多色的图标 这些还是要用位图来做 风险 需要修改的资源较多 基本所有页面要重新过一遍 可能影响到后续版本输出的进度 工作量预估 按各自负责模块内容 学铭2人日 瑞华3人日
  • 巨神奇,2013年的老Mac,竟直接装上macOS Ventura 13.1 Beta版

    写在前面 上期这篇文章 终于 老Mac可以跨级安装macOS Ventura了 中 我说了通过OpenCore Legacy Patcher可以跨级安装macOS Ventura 但却没给出一个切实的解决方法 本期我就说一下跨级安装的方法
  • 解决YOLOV5训练时P、R、mAP等值均为0的问题

    最近用YOLOV5训练自己的数据集 出现了训练失败的情况 比如box obj cls labels等均为nan或0 找了很多办法 其实就是cuda与PyTorch版本的问题 Epoch gpu mem box obj cls labels
  • 1603A - Di-visible Confusion

    1603A Di visible Confusion 题目 一个长度为N的数组从a1 a2 an 如果在存在不能被整除则可以删除 剩下的数变为a1 a2 an 1 求是否能使得数组为空 题解 每个数都会因为前一个数被删除而前移 所以遍历所有
  • 微信小程序如何实现将数据导出生成excel

    码字不易 有帮助的同学希望能关注一下我的微信公众号 Code程序人生 感谢 代码自用自取 这个需求也是我在接私活的时候遇到的 需求就是 要实现将指定数据库表的数据全部导出生成excel和按需导出 也就是导出全部数据 或者导出指定哪天的数据
  • Package opencv was not found in the pkg-config search path.

    安装好后opencv后执行下面这条语句的时候出错 pkg config cflags opencv Package opencv was not found in the pkg config search path Perhaps you
  • Git创建远程分支并提交代码到远程分支

    1 可以通过git branch r 命令查看远端库的分支情况 动图演示 选择项目右键选择 Git Bash Here 然后输入命令git branch r 2 从已有的分支创建新的分支 如从master分支 创建一个dev分支 但此时并没
  • 如何把itunes中的语音备忘录导出来

    2012 4 18 以前我把手机上的语音备忘录导出到itunes中 现在我想把在itunes中的语音备忘录导出来 如何导 己找到解决办法了 在语音备忘录中的语音文件 右键 选择 在资源管理其中显示
  • VSCode 结合Makefile设置调试方法

    添加构建 编译 链接等 任务 tasks json ctrl shift p打开命令行 输入Tasks Run task Create tasks json file from template 生成默认的tasks json文件 See
  • pythonturtle填充颜色函数_python turtle库颜色填充-绘制心形

    颜色填充函数 使用Turtle不仅可以画线条 也可以将画出的封闭线条进行填充 开始填充 begin fill 设定填充色 fillecolor 结束填充 end fill 实际操作 练习1 画心形import turtle import r
  • matlab中列平方求和公式,matlab求两列数据的平方和

    matlab怎样求矩阵每一行的平方和 有矩阵a则你所要求的矩阵b sum a a 2 附 这是点乘 就是矩阵每个对应位置的元素相乘sum a 2 是按行相加 得出的为列向量若sum a 是按列相加 得出的为行向量 基于matlab的数据正态
  • C语言的强制类型转换本质是什么?

    数据在计算机中是如何存储的 程序最终是要在计算机中运行的 中间产生的数据会暂存在内存 寄存器 cache中 也可以写到硬盘中保存起来 对计算机而言 数据没有什么变量类型 int char等 的区别 以字节为单位 计算机里存在的不是0就是1
  • AES128/ECB/PKCS5Padding 的实现

    AES的相关基础知识直接看WikiPedia 高级加密标准 附上 C C 可用代码 AES Cipher
  • 第15届全国大学生知识竞赛 2022ciscn初赛 部分wp

    Misc ez usb 1 键盘流量 USB协议数据部分在Leftover Capture Data域中 数据长度为八个字节 其中键盘击键信息集中在第三个字节中 如图 发现击键信息为0x06 即对应的按键为C 2 鼠标流量 USB协议鼠标数
  • Quoit Design (白话--分治--平面点对问题)

    Quoit Design Problem Description Have you ever played quoit in a playground Quoit is a game in which flat rings are pitc