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

P1257 平面上的最接近点对

题目

在这里插入图片描述

思路

详见加强加强版

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=4e5+10;
pair<int,int> a[maxn];
int n;
double d=1e16;
pair<int,int> vl[maxn],vr[maxn];
void read() { cin>>n;for(int i=1;i<=n;i++) cin>>a[i].first>>a[i].second; }
double dis2(pair<int,int> a,pair<int,int> b) { return (a.first-b.first)*(a.first-b.first)+(a.second-b.second)*(a.second-b.second); }
void solve(int l,int r){if(l==r) { swap(a[l].first,a[l].second);return; }int mid=l+r>>1;int x=a[mid].first;solve(l,mid),solve(mid+1,r);double dis=sqrt(d);int sl=0,sr=0;for(int i=l;i<=mid;i++) if(x-a[i].second<dis) vl[++sl]=a[i];for(int i=mid+1;i<=r;i++) if(a[i].second-x<dis) vr[++sr]=a[i];int p=1,q=0;for(int i=1;i<=sl;i++){while(p<=sr&&vl[i].first-vr[p].first>=dis) p++;while(q<sr&&vr[q+1].first-vl[i].first<dis) q++;for(int j=p;j<=q;j++) d=min(d,dis2(vl[i],vr[j]));}inplace_merge(a+l,a+mid+1,a+r+1);
}
signed main()
{read();sort(a+1,a+1+n);solve(1,n);printf("%.4lf",sqrt(d));return 0;
}
http://www.lryc.cn/news/113503.html

相关文章:

  • 8月1日上课内容 第一章web基础与http协议
  • Gson 添加数据默认值问题记录
  • 利用Arthas+APM监控进行Java性能深度定位
  • 【BASH】回顾与知识点梳理(十一)
  • vue2-diff算法
  • SpringBoot使用redis作为缓存的实例
  • vue3使用vue3-seamless-scroll插件
  • QT开发学习相关笔记
  • 拆分PDBQT文件并将其转换为PDB格式
  • Reinforcement Learning with Code 【Code 4. DQN】
  • Python3 高级教程 | Python3 正则表达式(一)
  • 奥威BI系统:零编程建模、开发报表,提升决策速度
  • 海康威视摄像头二次开发_云台控制_视频画面实时预览(基于Qt实现)
  • 单片机外部晶振故障后自动切换内部晶振——以STM32为例
  • Matlab实现决策树算法(附上多个完整仿真源码)
  • java中异步socket类的实现和源代码
  • ElasticSearch7.6入门学习笔记
  • 《面试1v1》ElasticSearch架构设计
  • tomcat和nginx的日志记录请求时间
  • 数据结构——红黑树基础(博文笔记)
  • 盘点帮助中心系统可以帮到我们什么呢?
  • Web3 solidity编写交易所合约 编写ETH和自定义代币存入逻辑 并带着大家手动测试
  • 概念解析 | 生成式与判别式模型在低级图像恢复与点云重建中的角力:一场较量与可能性探索
  • 【云原生】kubectl命令的详解
  • uniapp两个单页面之间进行传参
  • uniapp运行项目到iOS基座
  • HTTP——九、基于HTTP的功能追加协议
  • Redis 在电商秒杀场景中的应用
  • 大麦订单生成器 大麦一键生成订单
  • Java实现Google cloud storage 文件上传,Google oss