博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZOJ 2107 Quoit Design(分治法解最近对模板题)
阅读量:6581 次
发布时间:2019-06-24

本文共 1361 字,大约阅读时间需要 4 分钟。

原题链接:

解析:此题为最近对模板题,用分治法求最短对问题,可以在O(nlongn)时间内求出。

易错点:

  • + - 等符号与位移运算符 << 或者 >> 优先级没搞清楚,自以为位移运算符比 + - 高
  • 谁减去谁要写正确,因为都是排好序的,所以必然在后面的大于前面的

代码实例:

#include
#include
#include
#include
using namespace std;const int N = 100010;const int inf = 10e8;struct Point{ double x,y;}toy[N];int tmp[N];//用来存放以mid为中点d为半径的矩形范围内的点的下标 bool cmpx(Point a,Point b){ return a.x < b.x;}bool cmpy(int a,int b){//对存有结构体下标的数组进行排序,这样就可以不改变结构体的情况下使其有序 return toy[a].y < toy[b].y;}double dis(Point a,Point b){ return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}double closest_pair(int l,int r){ if(l == r) return inf;//返回无穷大 if(l + 1 == r) return dis(toy[l],toy[r]);//仅有俩个点,故此区间最短距离为 int mid = l+(r-l)/2; double d = min(closest_pair(l,mid),closest_pair(mid+1,r)); int cnt = 0; for(int i = l;i <= r;i++) if(fabs(toy[i].x-toy[mid].x) <= d) tmp[cnt++] = i; sort(tmp,tmp+cnt,cmpy); for(int i = 0;i < cnt;i++) for(int j = i+1;j < cnt && toy[tmp[j]].y - toy[tmp[i]].y < d;j++){ double d2 = dis(toy[tmp[i]],toy[tmp[j]]); if(d2 < d){ d = d2; break; } } return d;}int main(){ int n; while(~scanf("%d",&n) && n){ for(int i = 0;i < n;i++) scanf("%lf%lf",&toy[i].x,&toy[i].y);//数据大,效率高 sort(toy,toy+n,cmpx); printf("%.2f\n",closest_pair(0,n-1)/2); } return 0;}

 

转载于:https://www.cnblogs.com/long98/p/10352201.html

你可能感兴趣的文章
微软职位内部推荐-Senior SDE
查看>>
unity 人工智能AI,装备解锁临时笔记
查看>>
OOP 2.2 构造函数
查看>>
矩阵的坐标变换(转)
查看>>
Tomcat 服务器性能优化
查看>>
【框架学习】ibatis DAO框架分析
查看>>
Android Design Support Library使用详解
查看>>
Java历程-初学篇 Day03扫描仪与类型转换
查看>>
2017.10.26 ECN + product spec+ cypress ble module test+
查看>>
L92
查看>>
分享几个cocos2dx的小游戏
查看>>
简单几何(凸包) POJ 2187 Beauty Contest
查看>>
模拟 HDOJ 5095 Linearization of the kernel functions in SVM
查看>>
IDEA入门级使用教程-
查看>>
BZOJ5292 & 洛谷4457 & LOJ2513:[BJOI2018]治疗之雨——题解
查看>>
BZOJ4597:[SHOI2016]随机序列——题解
查看>>
ClassLoader.getResourceAsStream(name);获取配置文件的方法
查看>>
java语言体系的技术简介之JSP、Servlet、JDBC、JavaBean(Application)
查看>>
JAVA时间进行比较和转换,时间加减得到天数
查看>>
win7下JDK环境变量设置方法
查看>>