hdu 1007

第一个专题基础算法分治hdu 1007 hdu 1007 quoit design //1.只有一个点,那就是无穷 //2.只有两个点,那就是这两点间距离 //3.其它情况 ,左边,右边,跨中间(先小范围比较x,然后在这一小范围排序纵坐标,更新最近值) #include <iostream> #include<cstdio> #include<algorithm> #include<cmat 阅读详情

题目链接

http://acm.hdu.edu.cn/showproblem.php?pid=1007

简单地描述一下题目的

求两个点之间的最小距离的一半

(0,0) (1,1)

之间的距离是 2开根号 再除以2 大小是 0.707140...


#include<cmath>
#include<algorithm>
using namespace std;
int n;
struct node
{
    double x;
    double y;
}p[100005];
int a[100005];
double cmpx(node a,node b)
{
    return a.x<b.x;
}
double cmpy(int a,int b)
{
    return p[a].y<p[b].y;
}
double min(double a,double b)
{
    return a<b?a:b;
}
double dis(node a,node b)
{
    return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
double find(int l,int r)
{
    // 相邻的两个点直接距离
    if(r == l+1)
        return dis(p[l],p[r]);
    // 三个点,情况也不多,直接计算
    
    if(l+2 == r)
        return min(dis(p[l],p[r]),min(dis(p[l],p[l+1]),dis(p[l+1],p[r])));
    //  取出中间点
    
    int mid = (l+r)/2;
    //  继续往下递归 , 有点模仿二分查找  找两个点之间的距离
    double ans=min(find(l,mid),find(mid+1,r));
    int i,j,cnt=0;
    //  找到距离比相邻两个点还小的点(以x 排序)
     
    for(i=l;i<=r;i++)
    {
        if(p[i].x>=p[mid].x-ans && p[i].x<=p[mid].x+ans)
            a[cnt++]=i;
    }
    //  按照Y的坐标进行排序
    
    sort(a,a+cnt,cmpy);
    
     // 从所有比最小的距离还小点中亮亮进行比较找到 激励最近的那个点
    for(i=0;i<cnt;i++)
    {
        for(j=i+1;j<cnt;j++)
        {
            /**
             *  一开始是按照下进行排序的 
             *  现在按照y进行排序,如果y的值大于当前最小值的话,直接就结束了
             *  后边的值肯定是大于当前的最小值的
             *  这个优化很关键
             */
            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 i;
    while(scanf("%d",&n)!=EOF)
    {
        if(!n) break;
        for(i=0;i<n;i++)
            scanf("%lf %lf",&p[i].x,&p[i].y);
        //  先按照 x 坐标进行排序
        sort(p,p+n,cmpx);
        printf("%.2lf\n",find(0,n-1)/2);
    }
    return 0;
}

 

ACM-计算几何之Quoit Design——hdu1007 zoj2107 ACM 计算几何 Quoit Design hdu1007 zoj2107 最近点对 阅读详情

相关推荐

雷电模拟器安装面具环境并过软件检测系列(看这一篇就够了!)

雷电模拟器安装面具环境并过基本软件的环境检测

qq_45059975的博客 6万+

HDU1007 Quoit Design(分治)

题目链接:hdu1007 题目大意 给定一个整数 n ,下面跟着 n 对二维坐标 (x, y),其中x、y均为实数,表示平面内的 n 个点。问平面内这 n 个点之间的最短距离是多少?输出这个答案的一半。 解题思路 枚举 时间复杂度 O(n2)O(n^2)O(n2),具体做法略。 分治 对于分治的做法我们大致可以分为三个步骤:预处理,分离区间,合并区间。首先我们把平面的点一分为二,然后计算各自的最小距离,回溯后取其中最小后并枚举两个区间一个点在左另一个点在右的情况,计算距离看是否能够更新最小值。 以下是对

小胡同的诗 445

STM32H743 LAN8720网口配置避坑指南:用CubeMX v6.5.0快速搞定LWIP+FreeRTOS

本文详细介绍了使用CubeMX v6.5.0配置STM32H743与LAN8720网口的LWIP+FreeRTOS方案,涵盖硬件连接、时钟配置、ETH外设初始化及LWIP协议栈调优等关键步骤。特别针对常见陷阱提供解决方案,帮助开发者快速实现稳定网络通信,适用于嵌入式网络开发场景。

weixin_33739523的博客 357

ACM-HDU-1007

ACM-HDU-1007 题意大概:求n个点中最近两个点的距离的一半 思路: 用结构体来存x,y值,对结构体的x或y进行排序,从头到尾判断是否有x,y个相等的两个点,有就输出0.00 否则就用分治思想的函数:先按x坐标将进行排序,排好序的(x,y)点,分成两部分(左右),基点定为node[mid],mid=(l+r)/2,递归的分下去直到某一部分(左或右)只剩下2个或者3个点(可以直接算出距离比较得出min), 最后min只会在3种情况中出现:①.min在右半部分,②,min在左半部分,③.min是跨越左右

奋斗小白的博客 494

计算机网络实验——入侵检测系统实验

在图1所示的网络结构中,此方案的具体实施:在路由器Router1的接口1出方向配置入侵检测策略,在收到ICMP ECHO请求包时,丢弃并同步向日志服务器报告警告,此时,终端PC2和PC3无法对终端PC0和PC1执行ping操作,并且日志服务器将记录相应的警告信息;在实验一的基础上,添加扩展分组过滤器,指定需要进行检测的信息流的类别,将扩展分组和对应的入侵检测规则进行绑定,使得只对特定的信息流进行入侵检测。加载指定类别的特征库,这里的指定类别是 ios_ips 类别中的 basic 子类别。

放放的博客 1563

编写一个程序实现顺序表的各种基本运算(假设顺序表的元数基本类型为Char)

/* *Copyright (c) 2016, 烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作者:张旺华 *完成日期: 2016 年 7 月 1 日 *版本号:v1.0 *问题描述:编写一个程序实现顺序表的各种基本运算(假设顺序表的元数基本类型为Char) * */ #include #include #include

张旺华的博客 1万+

HDU1007(分治算法)

Quoit DesignTime Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 43000 Accepted Submission(s): 11172Problem Description Have you ever played qu

MrBlank的ACM记事本 2138

从零到一构建一个智能爬虫 Agent 完整教程

本文将打造一个具备自主决策、动态解析、反反爬、持久化能力的智能爬虫 Agent

数据知道的博客 4795

hdu1007平面最近点对分治

  题目大意:给你N对点,求这N对点中两队点的距离的一半,精确到小数点后两位暴力显然O(n^2),不能过。分治即可,对N对点对,求中间值,mid。按照横坐标升序排列,递归求出0到mid以及mid+1到N-1对点的最小距离。分治关键步骤在合并。我们求出两个最小距离,但是没有考虑一个点在左边,一个点在右边的情况。 先求出两个最小距离中较小的一个,记为mdis  根据mid点为分界点【mid-mdis,...

恒持此志成永志 364

六、Tool 工具系统:让大模型拥有“手脚“

我问你一个问题:大模型能不能告诉你"北京今天天气怎么样"?能——它能用非常流畅的中文回答你不能——它不知道这个答案因为它没有联网能力,也没有实时数据。它可能会自信地编一个"今天晴,25 度"给你——这就是幻觉。问题出在哪?大模型是一个"推理引擎",不是一个"执行引擎"。它知道天气 API 怎么调用,但不能真的发出 HTTP 请求。它知道 Python 代码怎么写,但不能真的运行代码。它知道数学公式,但做不了精确的大数计算。Tool 工具系统解决的,就是这个"最后一公里"问题。

牛肉胡辣汤 159

预测股票价格趋势:使用MATLAB进行股票价格预测

通过收集股票数据、数据预处理、构建预测模型以及可视化结果,我们可以利用MATLAB强大的计算和分析功能来预测股票价格的走势。然而,需要注意的是,股票市场具有高度复杂性和不确定性,预测结果仅供参考,并不构成投资建议。然而,借助计算机编程和数据分析工具,我们可以利用历史股价数据来建立模型,并预测未来的股票价格走势。首先,我们需要获取股票的历史价格数据。完成模型的拟合后,我们可以使用该模型来进行未来股票价格的预测。最后,我们可以使用MATLAB的绘图功能将预测的股票价格与实际股票价格进行对比,并进行可视化展示。

2301_79326588的博客 1018

HDU 1007 (分治递归)

之前做这题用了 讨巧的 方法,竟然也 accept 了,后来举出反例发现 那种解法有问题。 正确解法: 运用分治递归的思想,首先将 所有的点 按照x的大小顺序排好,相同的话,参照y的大小。 然后取中间的 一个点 作为分割线。 这时,结果可能有三种情况,第一,最短的点对 在 分割线 左边;第二,最短点对 在 分割线 右边; 第三,最短点对 跨越了 分割线,一左一右。 分别求出左边 和 右边

Jaster_wisdom的专栏 821

PCL 使用点云创建数字高程模型DEM【2025最新版】

使用点云创建数字高程模型DEM,并将结果保存为高程图像。博客长期更新,本文最近更新时间为:2025年9月15日。

点云侠的博客 2294

HDU1005——Number Sequence,HDU1006——Tick and Tick,HDU1007——Quoit Design

Problem - 1005 代码思路 函数 :主函数 :这个结果最后是超时运算 代码思路 初始化序列:数组用来存储序列的值。和变量分别用于记录循环节的长度和循环节开始的位置。计算序列:检测循环节:函数通过二分查找算法检测序列中的循环节。一旦找到重复的模式(即连续两项相同),它会记录循环节的开始位置()和长度()。输出结果:这种算法特别适用于计算周期性出现的序列,通过检测循环节可以极大地优化计算过程,尤其是在需要频繁查询大索引位置的场景下。Problem - 1006 代码思路

u014114223的博客 1124

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

7.29 HDU 2019 Multi-University Training Contest 3 1007

记HDU1007 multiset的使用。 题目的意思,就是在一个数组里面,给定一个整数,这个数组从前往后的时候,每一次从第一个数组的数据加到另外一个数据,问用最少的变零(把数组里面任意数字变成零)使得这个不等式成立。 从当然,这个如果用暴力,挨个排序,挨个判断,那就TLE了。 于是乎,便开始了Multiset的学习之旅//// 话不多说,先粘贴一下题目的要求 set集合特点就是不能存储...

Slian's Website 124

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

HDU - 1007 - Quoit Design (分治解平面最近点对)

HDU - 1007 - Quoit DesignHDU1007 查找平面最近点对 - Sun1956 - 优快云博客这个博客讲的不错。。不过画图发现并不需要取 66 个相邻的点, 44 个就行。 分析一下复杂度。。类似线段树,solve 运行了 O(n)O(n) 次,均摊每次运行处理的点的数量应该是 O(logn)O(logn) 个,排序的常数很小,因此总复杂度大概是 O(nlogn)O(nl

On the way 405

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

hdu1007 平面最近点对

//hdu1007 平面最近点对、 //第一次接触平面的最近点对,暴力果断过不了。 //解题思路:先按一个坐标轴进行排序比如x轴(若x坐标相同按y排序), //用分冶按x轴把点集分成两块,找出每一块的最近点对然后合并, //在合并过程中还要考虑由两个不同块构成的点对, //这里比较重要的是对所要比较的点要在之前求出最小距离的基础下筛选 //代码如下 : //PS:在这题发

三思 817

hdu 1007 平面最近点对

hdu 1007 详细解释 #include&amp;lt;bits/stdc++.h&amp;gt; #define inf 0x7fffffff #define linf 0x7fffffffffffffff #define fil(x,y) memset(x,y,sizeof(x)) #define fup(i,x,y) for(int i=(x);i&amp;lt;=(y);i++) #define fdn...

Taboo 174

HDU 1007 [Quoit Design] 分治

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1007 题目大意:N个点,求最近一对点的距离的一半。 关键思想:最傻瓜式的枚举所有点对的距离找最短 O(n^2),会TLE。 分治可以优化成O(nlogn)。二分区间,考虑三种情形:点对的两点都在左区间、两点都在右区间、两点一左一右 前两种情况,可以递归地解出来,分别为d1,d2。第三种,可以依...

weixin_30867015的博客 107

【分治 求最近点对】hdu 1007 Quoit Design

Link:http://acm.split.hdu.edu.cn/showproblem.php?pid=1007 #include using namespace std; /* hdu 1007 题意:给出物品在平面上的点坐标,求一个环不能一次套到两的最大半径,即最近点对距离的一半。 题解:先以x排序,用分治将问题分成左边部分的最近点对,和左边的最近点对,左边右边各一个点的 最近点对(在算

学无纸巾 371

HDU 1007(最近点对)

HDU1007最近点对 (分治法) 题目 : Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 43000 Accepted Submission(s): 11172 Problem Description Have you ever played quoit in a playground? Quoit is a game i

沐白白的博客 648

hdu 1007 Quoit Design(分治)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1007 题意:给出n个点求最短的两点间距离除以2。 题解:简单的分治。 其实分治就和二分很像二分的写dfs然后复杂度就是log(n*log(n)*log(n)) #include <iostream> #include <cstring> #...

awow80285的博客 302

HDU1007

layout: post title: "HDU 1007" date: 2017-04-23 14:27:18 +0800 categories: ACM tags: Partition author: SteveDevin mathjax: true content {:toc} 思路: 分治裸题, 求平面最接近点对: 对于要求最接近点对的区间S[l, r], 取 m ...

weixin_30315905的博客 231

hdu 1007 Quoit Design 平面最近点对问题

http://acm.hdu.edu.cn/showproblem.php?pid=1007 题意: 给n个点,求他们两两之间的距离的最小值 使用分治解法, 此题位平面最近点对问题的模板题 将所有点按x排序,然后不断二分,直到每一个小区间内只有1~2个点 对于一个区间l,r,他们的中间值mid, 假如我们知道 l~mid mid+1~r 这两个区间里面点的最短距离d1,d2,那么...

forOnward的博客 190

hdu 1007 Quoit Design (最近点对、分治)

hdu 1007 Quoit Design (最近点对) http://acm.hdu.edu.cn/showproblem.php?pid=1007 “最近点对”的经典入门题 所用到的思想和“归并排序”类似, 分治再合并。   #include "stdio.h"

833

hdu_1007_Quoit Design(最近点对)

题目连接:hdu_1007_Quoit Design 题意: 给你平面上的一些点,让你找出这些点的最近点对的距离 题解: 采用分治,达到O(nlognlogn)的时间复杂度就能艹过去了 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 #include...

weixin_30851867的博客 92
上一篇: ios开发过程中 设备类型的判断 系统版本号的判断
下一篇: UITabBar 自定义
杨小兵
博客等级 码龄14年 11粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值