zoukankan      html  css  js  c++  java
  • 旋转卡壳

    例题:P1452 .

    题意:找到所有点对的最大距离。

    一个凸包可以把所有点给包含进去,很明显最大距离点对是凸包上的点的点对。于是现在求凸包的最长直径。

    旋转卡壳

    依次按照极角枚举凸包上的边,找出与这条边最远距离的顶点,寻找这个点可以通过叉积算三角形面积实现。很明显顺次枚举边时,顶点也是顺次移动的,可以证明移动顶点复杂度为(O(n))。对于每个边和其对应顶点所形成的三角形,答案与这三条边取(max)就行了。

    为什么对于一条边找最远顶点一定包含了最长直径?可以发现直径对应的两个顶点,一定存在一个包含了这两个点和这两个点中某个点的相邻点的一个三角形,那么也一定会更新到这条边。

  • 相关阅读:
    libusbwin32
    KMP
    windows.h
    iomanip
    C++继承
    LIST
    fstream
    VS2010中调试c++程序的方法
    sstream
    char 与char* 字符串与字符
  • 原文地址:https://www.cnblogs.com/redegg/p/11982037.html
Copyright © 2011-2022 走看看