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: ...
随机推荐
- noip模拟赛 收集果子
分析:显然的,树形dp,状态也很好想到:f[i][j]表示以i为根的子树收集到j个果子的方案数.转移的话就相当于是背包问题,每个子节点可以选或不选.如果不选子节点k的话,那么以k为根的子树的边无论断不 ...
- hdu 4435 bfs+贪心
/* 题意:给定每个点在平面内的坐标,要求选出一些点,在这些点建立加油站,使得总花费最少(1号点必须建立加油站).在i点建立加油站需要花费2^i. 建立加油站要求能使得汽车从1点开始走遍全图所有的点并 ...
- 洛谷——P3379 【模板】最近公共祖先(LCA)
P3379 [模板]最近公共祖先(LCA) 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询 ...
- 洛谷——P1164 小A点菜
P1164 小A点菜 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:“随便点”. 题目描述 不过u ...
- spring-kafka
spring-kafka 使用spring-kafka的小伙伴,看过来. 说明 因为spring-kafka封装的比较厉害,可能跟你实际使用起来有很大的差别. 一个简单的消费例子 在spring-bo ...
- mysql建表语句key的含义
CREATE TABLE `admin_role` ( `adminSet_id` varchar(32) NOT NULL, `roleSet_id` varchar(32) NOT NULL, ...
- 通过ICursor对Table进行操作(添加、修改、删除)
通过ICursor对Table进行操作(添加.修改.删除) 2010-03-16 16:07:37| 分类: 工作|举报|字号 订阅 来自:http://blog.163.com/liuyang12 ...
- 关于Java函数不支持参数默认值的讨论,最后一条亮了 2333
- laravel event
事件监听 方法一: web.php Event::listen('eloquent.created: App\post',function(){ dump('A post was created'); ...
- [AngularJS 1.6] ngModelOptions and inheritance
Problem with ngModleOptions before 1.6: <input type="text" name="fullname" ng ...