差不多把第一期的题目搞完了
还差一个随机的算法
今天写的旋转卡壳 和 一个单位圆覆盖的题
剩下时间在看之前说的UVA的题 是明白了
然后就是魔女之泉2
POJ 2187
裸的旋转卡壳的问题
注意这里対踵点不是点对 而是点与对应的直线
点对的距离不满足单峰函数 可以找出反例
枚举凸包上每条边 可以找到离他最远的点 这时候更新答案
POJ 3608
问两个凸多边形上的最近距离
这里的距离可以是顶点间的距离 也可以是点到边 边到边的距离
还是按照旋转卡壳的思想 先找到分别的最上端和最下端点
都按逆时针旋转这两个点为起始的线段 直到一边与凸多边形上的边重合时更新答案 继续旋转
巧妙的是不需要角度计算 还是利用叉积
方法是先固定一侧的一个线段, 旋转另一个 直到另一线段满足叉积的判断 然后更新答案 在枚举下一个点
可以看第一篇博客里的配图
代码也因此很精妙 更新两线段间的最短距离 其实是四个点到线段的距离 有板子的
POJ 1981
单位圆覆盖
n^3暴力写的好的话可以过
正解应该是 n ^ 2 logn的做法
对于每个点, 我们以它为圆心做出一个单位圆,这样n个单位圆互相会有交集
考虑其中一个圆, 他和其他圆会相交得到若干段圆弧, 我们离散后,可以知道每段圆弧被覆盖多少次
圆弧被覆盖的次数即是在可以在同一个单位圆上的点的个数
所以 n枚举点 nlogn排序 统计圆弧覆盖即可
看完了那道题的做法觉得很巧妙 决定先写一发试试