当前位置: 首页 > news >正文

平面上的最接近点对

题目

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

分治,区间l, r的值是左区间和右区间和左右两个区间的距离最小。

求解复杂度nlogn

左右两区间可以仅查找l到r中x轴位置距离小于左区间和右区间求解得到的最小值,进行优化。可能会出现暴力的情况,但是已经被证明总的复杂度可以在nlogn内解决。

代码

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define nrep(i,a,b) for(int i=a;i>=b;i--)
#define all(a) a.begin(),a.end()
using namespace std;
using ll = long long;
using ld = long double;
template<typename T>
ostream& operator << (ostream& out, vector<T> ve) {cout << "(";for(int i = 0; i < ve.size(); i++) {cout << ve[i] << ",)"[i == ve.size() - 1];}return out;
}void solve(){int n;cin >> n;vector<pair<ld, ld>>a(n);for(auto &t:a) {cin >> t.first >> t.second;}auto dis = [&a](int x, int y) -> ld {ld ans = pow(a[x].first-a[y].first,2) + pow(a[x].second - a[y].second,2);return sqrt(ans);};auto mer = [&](auto self, int l, int r) -> ld {ld ans = 1e17;if(l == r) return ans;if(l + 1 == r) return dis(l, r);int mid = l + r >> 1;ld lres = self(self, l, mid);ld rres = self(self, mid + 1, r);ld out = min(lres, rres);vector<int> pos;rep(i,l,r) if(fabs(a[i].first - a[mid].first) < out) {pos.push_back(i);}sort(pos.begin(),pos.end(),[&](int u, int v) {return a[u].second < a[v].second;});for(int i = 0; i < pos.size(); i++) {for(int j = i + 1; j < pos.size()&& a[pos[j]].second - a[pos[i]].second < out; j++){out = min(out, dis(pos[i], pos[j]));}}return out;};sort(a.begin(),a.end(),[](auto l,auto r) {return l.first == l.second ? l.second < r.second : l.first < r.first;});cout << fixed << setprecision(4) << mer(mer, 0, n-1);
}
signed main() {ios::sync_with_stdio(false);int t=1;//cin >> t;while(t--){solve();}
}

相关文章:

  • C语言基础(11)【函数1】
  • t021-高校物品捐赠管理系统【包含源码材料!!!!】
  • mac版excel如何制作时长版环形图
  • selenium学习实战【Python爬虫】
  • 智能进化论:AI必须跨越的四大认知鸿沟
  • SQL进阶之旅 Day 14:数据透视与行列转换技巧
  • Spring Boot 从Socket 到Netty网络编程(下):Netty基本开发与改进【心跳、粘包与拆包、闲置连接】
  • FFMPEG 提取视频中指定起始时间及结束时间的视频,给出ffmpeg 命令
  • 数据库容量暴涨时优化方案
  • AI全栈之路:Ubuntu云服务器部署Spring + Vue + MySQL实践指南
  • 使用jstack排查CPU飙升的问题记录
  • 匀速旋转动画的终极对决:requestAnimationFrame vs CSS Animation
  • Redis 集群批量删除key报错 CROSSSLOT Keys in request don‘t hash to the same slot
  • GlobalSign、DigiCert、Sectigo三种SSL安全证书有什么区别?
  • 第二章 2.3 数据存储安全风险之数据存储风险防范
  • HRI-2025 | 大模型驱动的个性化可解释机器人人机交互研究
  • RabbitMQ 在解决数据库高并发问题中的定位和核心机制
  • Haystack:AI与IoT领域的全能开源框架
  • 快充诱骗协议芯片,支持全协议支持最大功率140W给产品快速供电
  • 一文读懂RAG流程中用到的请求参数与返回字段
  • 建设网站需要注意什么问题/长春百度推广公司
  • wordpress 登录后可查看/杭州最好的seo公司
  • 公司简介网站怎么做/整合营销传播案例
  • 网站建设所需资料及费用/阿里指数查询官网入口
  • 北京 互联网公司/seo搜索引擎优化内容
  • 网级移动营销下载/宿州百度seo排名软件