C++编程题目------平面上的最接近点对(分治算法)

题目描述

给定平面上n个点,找出其中的一对点的距离,使得在这n个点的所有点对中,该距离为所有点对中最小的。

输入格式

第一行一个整数 n,表示点的个数。

接下来 n 行,每行两个实数 x,y ,表示一个点的行坐标和列坐标。

输出格式

仅一行,一个实数,表示最短距离,四舍五入保留 4 位小数。

样例

样例输入 #1

3
1 1
1 2
2 2

样例输出 #1

1.0000
数据范围与提示

对于 100% 的数据,保证0<n<=10000 ,0<=x,y<=1000000000,小数点后的数字个数不超过6 。

代码:

#include<bits/stdc++.h>
using namespace std;
int n;
struct point{double x,y;
};
point a[10010],tmp[10010];
double ans;
bool cmpx(const point &A,const point &B){if(A.x==B.x)return A.y<B.y;elsereturn A.x<B.x;
}
bool cmpy(const point &A,const point &B){if(A.y==B.y)return A.x<B.x;elsereturn A.y<B.y;
}
double dist(point A,point B){return sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));
}
double f(int L,int R){double ans=2<<18;if(L==R)return ans;else if(L+1==R){return dist(a[L],a[R]);}else{int mid=(L+R)>>1;double ans1=f(L,mid);double ans2=f(mid+1,R);
//		cout<<ans1<<" "<<ans2<<endl; ans=min(ans1,ans2);
//		ans=ans1;
//		if(ans>ans2)
//			ans=ans2;int cnt=0;for(int i=L;i<=R;i++)if (fabs(a[i].x-a[mid].x)<=ans)tmp[++cnt]=a[i];sort(tmp+1,tmp+cnt+1,cmpy);for(int i=1;i<cnt;i++)for(int j=i+1;j<=cnt;j++)if(tmp[j].y-tmp[i].y<=ans)ans=min(ans,dist(tmp[i],tmp[j]));return ans;}
}
int main() {cin>>n;for(int i=1;i<=n;i++)cin>>a[i].x>>a[i].y;sort(a+1,a+n+1,cmpx);//for(int i=1;i<=n;i++)//cout<<a[i].x<<" "<<a[i].y<<endl;ans=f(1,n);cout<<fixed<<setprecision(4)<<ans<<endl;//print("%.4lf\n",ans);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/125696.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

torch.distributed.elastic.multiprocessing.api: [ERROR] failed (exitcode: -7)

在docker中运行时&#xff0c;由于配置的共享内存不足导致。新建docker时&#xff0c;shm-size设个大点的值。 不设置时&#xff0c;默认值时64M

Vue 的双向数据绑定是如何实现的?

目录 1. 响应式数据 2. v-model 指令 3. 实现原理 4. 总结 Vue.js 是一款流行的前端 JavaScript 框架&#xff0c;它以其强大的双向数据绑定能力而闻名。双向数据绑定使得数据在视图和模型之间保持同步&#xff0c;并且任一方的变化都会自动反映到另一方。那么&#xff0c;…

数据库和表的相关操作

文章目录 一 数据库的相关操作1.1 显示当前所有的数据库1.2 创建数据库1.3 使用数据库1.4 删除数据库 二 常用数据类型2.1 数值类型2.2 字符串类型2.3 日期类型 三 表的操作3.1 创建表3.2 查看表结构3.3 查看有哪些表3.4 删除表 四 重点内容总结 一 数据库的相关操作 1.1 显示…

python: 判断一个变量是不是class类

在一些时候&#xff0c;我们对函数或者类实例化的时候的传参进行判断是否是类&#xff0c;并做相应实例化处理&#xff0c;那么需要判断是否其是类(也就是你自建的 class XXX) 所以要想判断一个变量是不是类&#xff0c;总结了下面几种办法。 1. try except try:obj MyVari…

2021-arxiv-GPT Understands, Too

2021-arxiv-GPT Understands, Too Paper&#xff1a; https://arxiv.org/abs/2103.10385 Code&#xff1a; https://github.com/THUDM/P-tuning Prompt 简单理解 举例来讲&#xff0c;今天如果有这样两句评论&#xff1a; 1. 什么苹果啊&#xff0c;都没有苹果味&#xff0c…

rust std

目录 一&#xff0c;std基本数据结构 1&#xff0c;std::option 2&#xff0c;std::result 二&#xff0c;std容器 1&#xff0c;vector 三&#xff0c;std算法 1&#xff0c;排序 2&#xff0c;二分 &#xff08;1&#xff09;vector二分 &#xff08;2&#xff09;…

【C++代码】分割等和子集,目标和,一和零,零钱兑换,动态规划--代码随想录

题目&#xff1a;分割等和子集 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 初步想法排序后双指针&#xff0c;发现不行 class Solution { public:bool canPartition(vector<int>&…

计讯物联外贸公司--佰沃恩应邀出席第三届“嘉庚论坛”—科技创新推动经济高质量发展分论坛

10月22日&#xff0c;以“数智创新能动未来”为主题的第三届“嘉庚论坛”—科技创新推动经济高质量发展分论坛于集美海景皇冠假日酒店正式启幕。此论坛聚焦集美区战略前沿产业&#xff0c;汇聚来自全国各地优秀的企业家、高校及科研院所专家学者&#xff0c;并邀请相关领域的亲…

【案例实战】NodeJS+Vue3+MySQL实现列表查询功能

这篇文章&#xff0c;给大家带来一个列表查询的功能&#xff0c;从前端到后端的一个综合案例实战。 采用vue3作为前端开发&#xff0c;nodejs作为后端开发。 首先我们先来看一下完成的页面效果。点击分页&#xff0c;可以切换到上一页、下一页。搜索框可以进行模糊查询。 后端…

CSRF 篇

一、CSRF 漏洞&#xff1a; 1、漏洞概述&#xff1a; &#xff08;1&#xff09;一般情景&#xff1a; 利用已认证用户的身份执行未经用户授权的操作。攻击者试图欺骗用户在其不知情的情况下执行某些操作&#xff0c;通常是在受害者已经登录到特定网站的情况下。 &#xff0…

长沙某公司面经总结 - 失败版

1.Java语言的特征 Java的三大特性&#xff1a;封装、继承、多态 面向对象是利于语言对现实事物进行抽象。面向对象具有以下特征&#xff1a; 继承&#xff1a;继承是从已有类得到继承信息创建新类的过程 封装&#xff1a;封装是把数据和操作数据的方法绑定起来&#xff0c;对…

IP地址与代理ip在网络安全中的关键作用

目录 前言 一、IP地址在网络安全中的作用 1、网络流量监视和分析 2、网络安全事件响应 3、网络安全检测和防御 二、代理IP在网络安全中的作用 1、流量过滤和清洗 2、匿名访问和保护隐私 3、实现全球化业务 三、IP地址和代理IP在网络安全中的应用案例 1、DDoS攻击 2…

QT实现在线流媒体播放平台

文章目录 QT实现在线流媒体播放平台简介开发视频ffmpeg下载SimpleVideoPlayer.hSimpleVideoPlayer.cpp 开发音频添加功能打开文件夹播放暂停播放上下一首选择倍速 效果展示项目下载 QT实现在线流媒体播放平台 简介 Qt是一种流行的C开发框架&#xff0c;它提供了用于构建图形用…

AT32固件库外设使用,ArduinoAPI接口移植,模块化

目录 一、ArduinoAPI移植一、通用定时器使用1.计时1.2.ETR外部时钟计数4.ArduinoAPI - timer 三、ADC1.ADC初始化&#xff08;非DMA&#xff09;2.ADC_DMA 规则通道扫描 六、USB HID IAP1.准备好Bootloader和app2.配置好时钟&#xff0c;一定要打开USB3.将生成的时钟配置复制到…

Mybatis执行流程简析

一、前言 日常工作中&#xff0c;我们用到mybatis的时候&#xff0c;都是写一个Mapper接口xml文件/注解形式&#xff0c;然后就可以在业务层去调用我们在Mapper接口中定义的CRUD方法&#xff0c;很方便&#xff0c;但一直都没有去研究过执行逻辑&#xff0c;下面附一篇我自己研…

数据库强化(4.触发器)

1.触发器概述 触发器是一种特殊的存储过程&#xff0c;它与特定的表或列作特定类型的数据修改操作&#xff08;如INSERT、UPDATE、DELETE等&#xff09;相关联&#xff0c;并在这些操作发生时自动执行。触发器的主要作用是确保对数据的处理必须符合由触发器所定义的规则&#…

使用simple_3dviz进行三维模型投影

【版权声明】 本文为博主原创文章&#xff0c;未经博主允许严禁转载&#xff0c;我们会定期进行侵权检索。 更多算法总结请关注我的博客&#xff1a;https://blog.csdn.net/suiyingy&#xff0c;或”乐乐感知学堂“公众号。 本文章来自于专栏《Python三维模型处理基础》的系列文…

飞鹅打印机使用注意事项:打印小票(云播报打印机)FP-V58-W(c)

文章目录 引言I 基础操作1.1 设置Wi-Fi1.2 在机器内预先内置logo 引言 应用场景&#xff1a; 云播报打印机&#xff1a;支持第三方软件开发商&#xff0c;接单后实现智能语音播报&#xff0c;可播报订单信息、打印订单小票。 http://www.feieyun.com/open/index.html 飞鹅对…

Android OpenGL ES 2.0入门实践

本文既然是入门实践&#xff0c;就先从简单的2D图形开始&#xff0c;首先&#xff0c;参考两篇官方文档搭建个框架&#xff0c;便于写OpenGL ES相关的代码&#xff1a;构建 OpenGL ES 环境、OpenGL ES 2.0 及更高版本中的投影和相机视图。 先上代码&#xff0c;代码效果如下图…