思路:

旋转卡壳应用

注意点&边  边&边  点&点 三种情况

//By SiriusRen
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
const double eps=1e-5;
const int N=10050;
typedef double db;
int n,m;
struct P{db x,y;P(){}P(db X,db Y){x=X,y=Y;}}p1[N],p2[N];
P operator-(P a,P b){return P(a.x-b.x,a.y-b.y);}
db operator*(P a,P b){return a.x*b.y-a.y*b.x;}
db operator^(P a,P b){return a.x*b.x+a.y*b.y;}
db dis(P c){return sqrt(c.x*c.x+c.y*c.y);}
db dotc(P a,P b,P c){return (b-a)^(c-a);}
db difc(P a,P b,P c){return (b-a)*(c-a);}
db p2seg(P a,P b,P c){if(dotc(a,b,c)<-eps)return dis(a-c);if(dotc(b,a,c)<-eps)return dis(b-c);return abs(difc(a,b,c)/dis(a-b));
}
db seg2seg(P a,P b,P c,P d){return min(min(p2seg(a,b,c),p2seg(a,b,d)),min(p2seg(c,d,a),p2seg(c,d,b)));
}
double solve(P p[],P q[],int np,int nq){int sp=1,sq=1;for(int i=1;i<=np;i++)if(p[i].y<p[sp].y)sp=i;for(int i=1;i<=nq;i++)if(q[i].y>q[sq].y)sq=i;p[np+1]=p[1],q[nq+1]=q[1];double tmp,ans=1e9;for(int i=1;i<=np;i++){while(tmp=(difc(p[sp+1],q[sq+1],p[sp])-difc(p[sp+1],q[sq],p[sp]))>eps)sq=sq%nq+1;if(tmp<-eps)ans=min(ans,p2seg(p[sp],p[sp+1],q[sq]));else ans=min(ans,seg2seg(p[sp],p[sp+1],q[sq],q[sq+1]));sp=sp%np+1;}return ans;
}
int main(){while(scanf("%d%d",&n,&m)&&(n||m)){for(int i=1;i<=n;i++)scanf("%lf%lf",&p1[i].x,&p1[i].y);for(int i=1;i<=m;i++)scanf("%lf%lf",&p2[i].x,&p2[i].y);printf("%lf\n",min(solve(p1,p2,n,m),solve(p2,p1,m,n)));}
}

转载于:https://www.cnblogs.com/SiriusRen/p/9393188.html

POJ 3608 旋转卡壳相关推荐

  1. Bridge Across Islands POJ - 3608 旋转卡壳求凸包最近距离

    \(\color{#0066ff}{题目描述}\) 几千年前,有一个小王国位于太平洋的中部.王国的领土由两个分离的岛屿组成.由于洋流的冲击,两个岛屿的形状都变成了凸多边形.王国的国王想建立一座桥来连接 ...

  2. poj 3608 旋转卡壳求不相交凸包最近距离;

    题目链接:http://poj.org/problem?id=3608 #include<cstdio> #include<cstring> #include<cmath ...

  3. poj 2079(旋转卡壳)

    题意:求出平面内的点集所组成的面积最大的三角形. 解题思路:考虑凸包+旋转卡壳.面积最大的三角形的三点必定在凸包的顶点上,只不过这里要注意,三角形的边不一定就是凸包的边,有可能三角形相邻两点是横跨凸包 ...

  4. poj 2187 Beauty Contest (凸包: 最远点对,最长直径 , 旋转卡壳法)

    http://poj.org/problem?id=2187 题意: 最长的点对近距离的平方: 题解: 旋转卡壳法, 要注意的地方是,有 所有点共线的情况,所以,(求凸包时)要将,共线点去出 :    ...

  5. poj 2187(旋转卡壳)

    传送门 模板题,求凸包,用旋转卡壳求出最远点对. 因为把int弄成double,WA了好几次,差点对idy大神给的模板失去信心...不过事实证明idy的写法没问题,orz! #include<c ...

  6. POJ 2187 凸包+旋转卡壳

    思路: 求个凸包 旋转卡壳一下 就求出来最远点对了 注意共线情况 也就是说   凸包如果有一堆点共线保留端点即可 //By SiriusRen #include <cmath> #incl ...

  7. POJ - 2187 Beauty Contest (求距离最远点对-凸包+旋转卡壳/枚举 (旋转卡壳学习))

    链接:https://vjudge.net/problem/POJ-2187 题意:求求距离最远点对. 思路:肯定为凸包上的点,可枚举,也可根据凸包性质旋转卡壳求对踵点. 参考博客: https:// ...

  8. POJ 3608 Bridge Across Islands 《挑战程序设计竞赛》

    为什么80%的码农都做不了架构师?>>>    POJ 3608 Bridge Across Islands跨岛大桥:在两个凸包小岛之间造桥,求最小距离?3.6与平面和空间打交道的计 ...

  9. 旋转卡壳凸包(不用一下子就学完所有)

    目录 前言 参考博客 前置知识 1.极角排序 2.凸包(默认逆时针) 3.对踵点 旋转卡壳能解决的各类问题 1.计算距离 1.1凸多边形直径 1.2凸多边形宽 1.3凸多边形间最大距离 1.4凸多边形 ...

最新文章

  1. python程序语法元素分析_Python程序语法元素分析(2)
  2. 无法访问此网站 localhost 拒绝了我们的连接请求。_网站经常被DDOS攻击会造成什么影响...
  3. gitlab修改管理员密码流程
  4. 课程目标IO java
  5. servlet和JSP页面乱码问题
  6. oracle递归查询出现死循环,oracle 递归查询求出起点、终点问题的解决方法
  7. Nuance语音识别技术及解决方案
  8. Linux2.6用户空间堆栈区的分配与回收
  9. 计算机u启动无法识别,电脑不识别u盘启动盘
  10. 基于产生式系统方法实现动物识别系统
  11. 【Android】_MediaServer_仿网易云音乐播放器1(指针和唱片)
  12. 固态和机械硬盘组raid_相同大小的固态硬盘和机械硬盘组RAID1会不会影响固态硬盘的速度?...
  13. python实例练习(9)图像的手绘效果
  14. 计算机论文档案初探,[电子档案管理论文:档案计算机管理技术人才培训工作初探.doc...
  15. 给前端工程师看的后端科普
  16. 上行PHR余量提升优化思路
  17. 用matlab拟合多元函,使用matlab进行多元非线性拟合的方法
  18. python人脸识别项目_face++与python实现人脸识别签到(考勤)功能
  19. Python爬虫实战,pyecharts模块,Python实现中国地铁数据可视化
  20. 将Edgex网关接入Thingsboard物联网平台

热门文章

  1. SIFT讲解(SIFT的特征点选取以及描述是重点)
  2. Python---查找序列的最长递增子序列
  3. Python-杨辉三角
  4. 如何打开eclipse进行编写Java程序
  5. 【操作系统】互斥:软件解决方法
  6. 102. 二叉树的层序遍历 golang
  7. mysql 学习笔记 多表查询02
  8. linux服务器无法识别xml文件,linux上重启服务器提示找不到smartbi-config.xml文件
  9. 交叉编译openssl不修改Makefile的方法
  10. Python a和a[:]的区别