计算几何
文章平均质量分 80
iYUNDI
iYUNDI
展开
-
[poj 1127]Jack Straws[线段相交][并查集]
根据线段相交情况建立并查集, 在同一并查集中则连通. (第一反应是强连通分量...实际上只要判断共存即可, 具体的方向啊是没有关系的..) 并查集合并的时候是根节点合并. 快速排斥试验不是必需的, 大规模数据可能是个优化吧. 跨立试验注意共线的情况. 共线判断注意与y 轴平行的情况.原创 2013-08-26 18:01:32 · 1103 阅读 · 0 评论 -
[poj 2991]Crane[线段树表示向量之和,而非数量]
由于旋转会影响到该点之后所有线段的角度, 因此容易想到用线段树记录角度, 成段更新. (但是不是每一次操作都要询问一次么? 那么懒惰标记还有用么? 如果使用懒惰标记, 将一些线段视为整体, 那么这些线段岂不是又要用一个线段树记录一段区间的总长? 树状数组亦可...) 将向量视为数量整体加和, 融入到线段树的操作中, 就可以避免角度和坐标分离的麻烦事.. 对线段树的求和理念理解不深, 只是想到了角度的加和, 殊不知向量本身也可以加和, 而且"和向量"与"分向量"的关系是层层细分下去的. 有了这样的思维框架原创 2013-09-02 21:29:13 · 1727 阅读 · 2 评论 -
[HDU 4666]Hyperspace[最远曼哈顿距离][STL]
题意: 许多 k 维点, 求这些点之间的最远曼哈顿距离. 并且有 q 次操作, 插入一个点或者删除一个点. 每次操作之后均输出结果. 思路: 用"疑似绝对值"的思想, 维护每种状态下各点的计算值, 插入或删除一个点就更新一次每种状态(用multiset或map或priority_queue实现), 每次求ans时扫一遍最大差值即可. 为了练习STL, 每一个都实现一次.原创 2013-08-31 19:17:57 · 1316 阅读 · 0 评论 -
[poj 2926]Requirements[最远曼哈顿距离]
题意 求5维点中曼哈顿距离最远的两点间的曼哈顿距离. define the dissimilarity of two universities X and Y : |x1 − y1| + |x2 − y2| + |x3 − y3| + |x4 − y4| + |x5 − y5| (这里, 标号代表不同的维, 而字母代表不同的变量, 与下面二维的表示习惯正好相反) 思路原创 2013-08-31 19:15:15 · 1943 阅读 · 2 评论 -
[poj 1379]Run Away[模拟退火]
题意: 找出矩形中与所有点距离最远的点. 思路: 仍然是模拟退火, 需要更改的就是估价函数, 精度D&边界问题(求最小值的话不需要额外限制边界,因为边界外的肯定没有边界内的距离短嘛,但是求最长距离的话就有可能选择边界外的点了), 判断条件. /* ...that has the maximal distance from all the holes中,和所有点的距离定义为所有点距中最小的原创 2013-08-28 21:34:26 · 987 阅读 · 0 评论 -
[经典]大白话解析模拟退火算法
http://www.cnblogs.com/heaad/archive/2010/12/20/1911614.html 浅显易懂, 清楚明白, 入门之佳品, 菜鸟之福音. === 一. 爬山算法 ( Hill Climbing ) 介绍模拟退火前,先介绍爬山算法。爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解转载 2013-08-28 18:51:31 · 1452 阅读 · 0 评论 -
[poj 2420]A Star not a Tree?[模拟退火]
题意: 求多边形的费马点, 输出该点到所有顶点的连线长. 思路: 模拟退火. 学习模板: /* 参考:http://blog.sina.com.cn/s/blog_64675f540100sehz.html 模拟退火的过程 1 找到这些点所在的范围,用两个点框定(代码中e1,e2两个点) 2 在这个范围内生成NUM个点(NUM自定) 3 对于每个生成的点i,在其周围(横纵坐标±原创 2013-08-28 20:04:15 · 1071 阅读 · 0 评论 -
[poj 1474]Video Surveillance[半平面交][多边形的核]
仍然是模板题. 顺时针输入. WA了一次, 因为上一道题的MAXN是50而这个是100.........细节细节 PE了一次, 唉....仄个仄个.... #include #define vector point const double INF = 1e18; struct point { double x,y; point(double xx = 0,doub原创 2013-08-28 13:40:11 · 1006 阅读 · 0 评论 -
[hoj 1489]ATDS[凸包][旋转卡壳]
题意: 求一堆点中两点之间的最大距离. 思路: 凸包+旋转卡壳. [大水] 注意 n==1 的情况. #include #include #include using namespace std; const int INF = 0x3f3f3f3f; const double EPS = 1e-8; const int MAXN = 6005; struct point原创 2013-08-27 21:25:21 · 995 阅读 · 0 评论 -
[poj 1113]Wall[凸包]
题意: 求围一座多边形城堡的最短围墙, 围墙需满足: 距离城堡上所有的点至少距离为L 思路: 求出凸包, 边长加上一个半径为L的圆的周长. 因为距离拐点处的最短墙是弧形的. 相当于测试凸包模板了~原创 2013-08-27 20:33:28 · 1070 阅读 · 0 评论 -
[hoj 2742]The Shape of Donggua[凸包][Graham Scan][旋转卡壳]
所谓凸包(这里说的是平面点集的凸包),就是一个最小的凸多边形,把所有给定点包含在内。显然,凸包一定是由给定的点中的某一些点构成。 一种快速而且简便的凸包算法——Graham Scan 预处理要对所有点进行排序。找出一个最左边的点,如果有多个再找最下边的。然后以这个点为准对其他所有点按照逆时针顺序排序(其实顺时针也可以,但是大多数人的习惯是逆时针),这里要用到向量叉积。 选择原点和第一个点入栈. 遍历剩下的每一个点 P. 设栈顶点为A, 次顶点为B, 则: 1. 若 PA原创 2013-08-27 20:14:35 · 1032 阅读 · 0 评论 -
[poj 1039]Pipes[线段相交求交点]
首先可以发现: 由于光线是入口整个发出的, 其实也就是入口和拐点是平等的. 只要判相交. 只要覆盖在整个管道范围内的直线就可以, 由于不知道管道的形状特点, 只能暴力枚举每一组上下界. 能够完全穿过的直线就取"恰好与出口的一端相交"的情况. 这样做就将当前所枚举的两端点视为一段管道, 当前直线可以穿过当前等效管道, 判别是否可以穿过其他管道(包括等效管道内部的真实管道). 也就是将一系列判别满足的问题拆分为, 保证单个问题满足, 并用此一单个问题 粗略划定的范围去测试其它. 这样就解决了用来测试的范原创 2013-08-26 15:50:15 · 1072 阅读 · 0 评论 -
[poj 1265]Area[Pick定理][三角剖分]
题意: 给出机器人移动的向量, 计算包围区域的内部整点, 边上整点, 面积. 思路: 面积是用三角剖分, 边上整点与GCD有关, 内部整点套用Pick定理. S = I + E / 2 - 1 I 为内整点数, E为边界整点数, S为面积. Separate the three numbers by two single blanks.....好吧, 理解成中间空两格PE一次>原创 2013-08-26 20:38:25 · 909 阅读 · 0 评论 -
[HDU 4741]Save Labman No.004[计算几何][精度]
题意: 求两条空间直线的距离,以及对应那条距离线段的两端点坐标. 思路: 有一个参数方程算最短距离的公式, 代入求即可. 但是这题卡精度... 用另外的公式(先算出a直线上到b最近的点p的坐标, 再算出b直线上到a最近的点q的坐标, 再求这两点距离)用double可以过, 直接参数方程的公式用long double才可以>WA,G++->AC... long double原创 2013-09-15 20:44:41 · 1316 阅读 · 0 评论