博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【旋转卡壳】poj3608 Bridge Across Islands
阅读量:6874 次
发布时间:2019-06-26

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

给你俩凸包,问你它们的最短距离。

咋做就不讲了,经典题,网上一片题解。

把凸包上的点逆时针排序。可以取它们的平均点,然后作极角排序。

旋转卡壳其实是个很模板化的东西……

先初始化分别在凸包P和Q上取哪个点,一般在P上取纵坐标最小的点,在Q上取纵坐标最大的点

for i=1 to n(n是凸包P上的点数)

{

while(两条边的叉积>0)

  {

  凸包Q上的点++

  }

计算当前两条边之间的答案(或者说每条边的2个端点到另一条边的答案)

凸包P上的点++

}

#include
#include
#include
using namespace std;#define EPS 0.0000000001struct Point{ double x,y; Point(){} Point(const double &X,const double &Y) { x=X; y=Y; } double Length() { return sqrt(x*x+y*y); }}p[2][10010],bao[2][10010],ave;typedef Point Vector;Vector operator - (const Point &a,const Point &b){ return Vector(a.x-b.x,a.y-b.y);}bool cmp (const Point &a,const Point &b){ return atan2((a-ave).y,(a-ave).x)
(-EPS)) return v3.Length(); else return fabs(Cross(v1,v2))/v1.Length();}int n,m;int main(){ //freopen("y.in","r",stdin); while(1) { scanf("%d%d",&n,&m); if(n==0 && m==0) break; for(int i=0;i
EPS) nowQ=i; double ans=1000000000000000007.0; for(int i=0;i
EPS) nowQ=(nowQ+1)%m; ans=min(ans, min(calc(p[0][nowP],p[1][nowQ],p[1][(nowQ+1)%m]), min(calc(p[0][(nowP+1)%n],p[1][nowQ],p[1][(nowQ+1)%m]), min(calc(p[1][nowQ],p[0][nowP],p[0][(nowP+1)%n]), calc(p[1][(nowQ+1)%m],p[0][nowP],p[0][(nowP+1)%n]))))); nowP=(nowP+1)%n; } printf("%.5lf\n",ans); } return 0;}

转载于:https://www.cnblogs.com/autsky-jadek/p/6361473.html

你可能感兴趣的文章
cocos2dx物理引擎
查看>>
我的友情链接
查看>>
HTML5 canvas 实现同步时钟
查看>>
css的线性渐变详解
查看>>
我的友情链接
查看>>
linux下面的性能分析工具简介
查看>>
ensp学会配置单区域的OSPF网络
查看>>
spring上下文中读取properties文件中的值
查看>>
Android数据库(sqlite)加密方案
查看>>
freemarker.net模板引擎【ASP.NET MVC】
查看>>
mysql一键编译安装脚本,MySQL 主主实施部署,及读写分离
查看>>
zabbix之固定端口监控redis ,zabbix监控memcached
查看>>
[1line]用wget镜像网站
查看>>
PHP画图时出现“因其本身有错无法显示”的问题的解决办法
查看>>
查看和修改awr报告保留时间
查看>>
虚拟化与云计算也跳不出的成本怪圈——新时代下的“安迪-比尔定律”分析
查看>>
fedora 17 gnome 添加打开终端快捷键
查看>>
微信浏览器返回上一页停留在原位置
查看>>
nfs服务器的搭建和挂载使用
查看>>
我的友情链接
查看>>