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

平面上的最接近点对

题目

给定平面上 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();}
}
http://www.xdnf.cn/news/11803.html

相关文章:

  • 怎么通过 jvmti 去 hook java 层函数
  • 构建高效可靠的电商 API:设计原则与实践指南
  • PyTorch学习笔记 - 损失函数
  • unix/linux,sudo,其历史争议、兼容性、生态、未来展望
  • 如何有效删除 iPhone 上的所有内容?
  • 激光干涉仪:解锁协作机器人DD马达的精度密码
  • 前端工具库lodash与lodash-es区别详解
  • ES海量数据更新及导入导出备份
  • 设计模式之单例模式(二): 心得体会
  • UE 5 和simulink联合仿真,如果先在UE5这一端结束Play,过一段时间以后**Unreal Engine 5** 中会出现显存不足错误
  • 功能测试、性能测试、安全测试详解
  • 近端策略优化(PPO,Proximal Policy Optimization)
  • vue实现点击按钮input保持聚焦状态
  • Oracle实用参考(13)——Oracle for Linux静默安装(1)
  • springboot 微服务 根据tomcat maxthread 和 等待用户数量,达到阈值后,通知用户前面还有多少用户等待,请稍后重试
  • 低代码采购系统搭建:鲸采云+能源行业订单管理自动化案例
  • Electron打包前端和后端为exe
  • el-table 树形数据,子行数据可以异步加载
  • 破解HTTP无状态:基于Java的Session与Cookie协同工作指南
  • 618浴室柜推荐,小户型浴室柜怎么选才省心?
  • 江科大睡眠,停止,待机模式hal库实现
  • MySQL范式和反范式
  • Windows安装docker desktop
  • 【使用JAVA调用deepseek】实现自能回复
  • Devops自动化运维---py基础篇一
  • Appium如何支持ios真机测试
  • CppCon 2014 学习:Mixins for C++
  • 基于行为分析的下一代安全防御指南
  • webPack基本使用步骤
  • Cocos creator游戏开发面试题