POJ 3608 旋转卡壳
思路:
旋转卡壳应用
注意点&边 边&边 点&点 三种情况
//By SiriusRen
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
const double eps=1e-;
const int N=;
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=,sq=;
for(int i=;i<=np;i++)if(p[i].y<p[sp].y)sp=i;
for(int i=;i<=nq;i++)if(q[i].y>q[sq].y)sq=i;
p[np+]=p[],q[nq+]=q[];
double tmp,ans=1e9;
for(int i=;i<=np;i++){
while(tmp=(difc(p[sp+],q[sq+],p[sp])-difc(p[sp+],q[sq],p[sp]))>eps)sq=sq%nq+;
if(tmp<-eps)ans=min(ans,p2seg(p[sp],p[sp+],q[sq]));
else ans=min(ans,seg2seg(p[sp],p[sp+],q[sq],q[sq+]));
sp=sp%np+;
}return ans;
}
int main(){
while(scanf("%d%d",&n,&m)&&(n||m)){
for(int i=;i<=n;i++)scanf("%lf%lf",&p1[i].x,&p1[i].y);
for(int i=;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)));
}
}
POJ 3608 旋转卡壳的更多相关文章
- poj 3608(旋转卡壳求解两凸包之间的最短距离)
Bridge Across Islands Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9768 Accepted: ...
- Bridge Across Islands POJ - 3608 旋转卡壳求凸包最近距离
\(\color{#0066ff}{题目描述}\) 几千年前,有一个小王国位于太平洋的中部.王国的领土由两个分离的岛屿组成.由于洋流的冲击,两个岛屿的形状都变成了凸多边形.王国的国王想建立一座桥来连接 ...
- poj 3608 旋转卡壳求不相交凸包最近距离;
题目链接:http://poj.org/problem?id=3608 #include<cstdio> #include<cstring> #include<cmath ...
- Poj 2187 旋转卡壳
Poj 2187 旋转卡壳求解 传送门 旋转卡壳,是利用凸包性质来求解凸包最长点对的线性算法,我们逐渐改变每一次方向,然后枚举出这个方向上的踵点对(最远点对),类似于用游标卡尺卡着凸包旋转一周,答案就 ...
- poj 2079(旋转卡壳求解凸包内最大三角形面积)
Triangle Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 9060 Accepted: 2698 Descript ...
- POJ 2187 旋转卡壳 + 水平序 Graham 扫描算法 + 运算符重载
水平序 Graham 扫描算法: 计算二维凸包的时候可以用到,Graham 扫描算法有水平序和极角序两种. 极角序算法能一次确定整个凸包, 但是计算极角需要用到三角函数,速度较慢,精度较差,特殊情况较 ...
- POJ 3608 Bridge Across Islands (旋转卡壳)
[题目链接] http://poj.org/problem?id=3608 [题目大意] 求出两个凸包之间的最短距离 [题解] 我们先找到一个凸包的上顶点和一个凸包的下定点,以这两个点为起点向下一个点 ...
- POJ 3608 Bridge Across Islands --凸包间距离,旋转卡壳
题意: 给你两个凸包,求其最短距离. 解法: POJ 我真的是弄不懂了,也不说一声点就是按顺时针给出的,不用调整点顺序. 还是说数据水了,没出乱给点或给逆时针点的数据呢..我直接默认顺时针给的点居然A ...
- POJ 3608 Bridge Across Islands(旋转卡壳,两凸包最短距离)
Bridge Across Islands Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7202 Accepted: ...
随机推荐
- 携程Apollo(阿波罗)配置中心本地开发模式不接入配置中心进行本地开发
官方教程:https://github.com/ctripcorp/apollo/wiki/Java%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8%E6%8 ...
- java.lang.RuntimeException: JPedal Trial has now expired
具体提示: java.lang.RuntimeException: JPedal Trial has now expired jpedal-server-trial.jar jar包过期了,jpeda ...
- 玩转iOS开发 - 消息推送
消息推送
- Ios开发之 -- js和ios的交互
==WebViewJavascriptBridge的介绍== #下载:https://github.com/marcuswestin/WebViewJavascriptBridge #关于WebVie ...
- 11种常见sqlmap使用方法
sqlmap是渗透中常用的一个注入工具,其实在注入工具方面,一个sqlmap就足够用了,只要你用的熟,秒杀各种工具,只是一个便捷性问题. 一.SQLMAP用于Access数据库注入 (1) 猜解是否能 ...
- MySQL具体解释(21)------------缓存參数优化
数据库属于 IO 密集型的应用程序.其主要职责就是数据的管理及存储工作. 而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所以,要优 ...
- ssh 远程登陆指定port
ssh 到指定port ssh -p xx user@ip xx 为 port号 user为username ip为要登陆的ip
- eclipse到Android Studio的项目迁移
一直以来.公司开发都是用eclipse.可是随着我们应用不断成长.项目结构越来越庞大.项目间依赖关系变得非常复杂.用eclipse管理显得非常吃力,常常一个同事更改依赖项目之后,别人在更新.都会出现故 ...
- ACdream区域赛指导赛之手速赛系列(5) 题解
A - Problem A Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Submi ...
- [DevExpress]设置列的时间格式
方法一 设置DisplayFormatFormatString:gFormatType:DateTime 方法二