旋转卡壳

  到现在依然不确定要怎么读...

  以最远点对问题为例,枚举凸包上的两个点是最简单的想法,时间复杂度O(n2

  我们想象用两条平行线卡着这个凸包,当其中一个向某个方向旋转的时候另一个显然也是朝同样的方向旋转

  所以在枚举其中一条边的过程中完全没有必要重新枚举另一条边

  而且对于一条边而言,凸包上的点到这条边的距离是满足单峰性质的

  所以线性的做法就出来啦

  ↓代码非常短很优秀~

  [UPD.05.11]:回过头来复习的时候猛然发现这里没有讲它过程的原理...

  为什么叉积大的离水平线的距离更远一些?因为叉积可以表示(i,i+1,j)三点构成三角形的面积的两倍

  而三角形面积=1/2底*高在这里也就是线段(i,i+1)*点j到水平线的距离,所以叉积越大距离就越远了~

  然而由于使用旋转卡壳是在已经求出凸包的基础之上的,所以叉积的值必为正,就不用考虑负面积的问题了

procedure Roatating_Calipers;
begin
  stack[len+]:=stack[];j:=;
  ans:=;
  for i:= to len do
  begin
    while cross(stack[i],stack[i+],stack[j])<cross(stack[i],stack[i+],stack[j+]) do j:=j mod len+;
    ans:=max(ans,max(getdis(stack[i],stack[j]),getdis(stack[i+],stack[j+])));
  end;
end;

  POJ2187 最远点对问题直接用RC

  BZOJ1069 可以枚举一条对角线,在两边各找出一个点使得面积和最大,两边在保证在某个区间内的情况下做RC

  BZOJ1185 是一道非常好的题,但目前还没有A掉...昨天奋战了一个晚上但在精度问题上还是卡住了

  最小矩形根据黑书上的写法采用最小角前进,然而黄学长的做法代码又短又好看

  发现只要引入点积会有一些奇妙的性质

  在确定了一条边的时候找最远的边直接是裸的RC

  然而怎么找这个矩形里最左的点和最右的点?

  结论:点积越大越右,点积越小越左。

  这个稍加证明即可。

最新文章

  1. leetcode-【中等题】3. Longest Substring Without Repeating Characters
  2. (转) 使用Speech SDK 5.1文字转音频
  3. DEP受保护的问题(尤其是Outlook)
  4. 使用nodejs爬前程无忧前端技能排行(半半成品)
  5. LeetCode 229. Majority Element II (众数之二)
  6. Android 屏幕刷新机制
  7. C# 创建Web项目时 可以选择的类型在不同VS版本下的对比
  8. Selenium及Headless Chrome抓取动态HTML页面
  9. Dev、GridControl的模糊查询
  10. 关于js事件执行顺序
  11. javascript编程基础1
  12. Java 之 JavaScript (二)
  13. windows下elasticsearch6.X安装IK分词器
  14. 【转载】eclipse常用插件在线安装地址或下载地址
  15. Python3 re模块正则表达式中的re.S
  16. Apache Kafka源码分析 &ndash; Log Management
  17. 使用 Gradle 配置java项目
  18. Centos 虚拟机网络问题,网卡起不来,重启network服务失败
  19. (1)Python 安装使用IDLE
  20. spring中的class配置不能使用properties中的字符串

热门文章

  1. MySQL server has gone away 错误处理
  2. nginx location优先级
  3. Linux 下 PHP 扩展Soap 编译安装
  4. 操作Excel的宏
  5. 活动的生命周期 Android
  6. 护网杯 three hit 复现(is_numeric引发的二次注入)
  7. CodeBlocks 3 使用设置
  8. 阿里云服务器安装https证书 centos + httpd + Symantec
  9. python之pyquery库
  10. mysql 查询表的字段数目