计算几何
文章平均质量分 87
qkoqhh
这个作者很懒,什么都没留下…
展开
-
USACO 5.1
那就开始计算几何吧。。。先来解决一下凸包问题。。凸包问题求法貌似蛮多主要是Graham扫描法和Jarvis步进法。。看了一下,Graham复杂度为O(nlogn),Jarvis复杂度为O(nh),h为凸包上的点数。。。感觉还是Graham稳定性比较好,毕竟一般求凸包不会是主要的,所以凸包上点数量一般会比较多,那么Jarvis就很可能退化为O(n^2)了,而且Graham代码也十分好写。。。原创 2017-12-02 21:23:29 · 229 阅读 · 0 评论 -
hdu3007(最小包围圆/最小覆盖圆)
这个。。初看这个题型竟然看成最小包围圈= =!然后算法感觉比较奇怪。。叫什么随机增量法。。不过个人感觉是暴力枚举吧。。由于3点确定一圆,所以枚举3个点,如果有点在圆外那么加入该点之后该点必定在覆盖圆上。。然后据说这方法的时间复杂度的期望是O(n)。。。给窝感觉却不止o(n)。。证明看不懂。。实际上貌似真的没那么快。。。500都跑60ms是闹哪样?然后求圆心的方法转载 2018-02-18 17:08:26 · 1170 阅读 · 3 评论 -
poj3714(平面最近点对)
感觉这题有点强行出题的感觉,数据都是设计好给这个算法过的,十分不科学。。然而还是要练的。。此题就是直接分治,然后多了一步判断是否在同一集合内才维护最值。。然而如果这2个集合是水平分离的。。那肯定要退化成n^2...这里提出一点想法吧。。将集合的重心都求出来,然后得到2重心对应直线斜率,这样就可以旋转坐标系,把这2个重心都移动到y轴上。。这样应该可以降低一点复杂度。。。然而实际上能不能行原创 2018-02-17 23:12:07 · 415 阅读 · 0 评论 -
poj3384(半平面交)
这个。。圆心的范围就直接将边向内平移R距离,求半平面交就行。。然后求出范围之后就要求最远距离了。。一开始想到旋转卡壳然而唯一写的一次旋转卡壳都没写完啊。。看到n的范围发现直接暴力枚举就行了233333还好不求面积。。太麻烦了。。_(:зゝ∠)_#include#include#include#include#include#include#defin原创 2018-02-07 21:32:56 · 329 阅读 · 0 评论 -
poj3525(二分答案+半平面交)
应该说是到好题。。可惜不小心看到二分这个字眼然后浪费了qaq直接二分答案后平移线段,按倾斜角+90度的方向偏移即可,然后剩下的就是判断有没有核了。。。#include#include#include#include#include#include#define inc(i,l,r) for(int i=l;i<=r;i++)#define dec(i,原创 2018-02-07 13:17:59 · 530 阅读 · 0 评论 -
牛客练习赛11E(最近点对)
这个题出得还是蛮好的其实。。要不是看到很多人A了窝可能就被数学劝退了。。表面是数学题,那个函数分析一下就会发现和距离公式很像。。设h(x)为a的前缀和,那f(x)就是h(x)上2点之间的距离,即求h(x)上的最近点对。。然后关于最近点对窝是没学过。。然后由汪聚聚提供了模板。。过后要学。。可以很容易发现这个是个分治算法。。。而且合并时候复杂度相当危险。。一开始用的时候果然T了,分析了一下发现x太小而...原创 2018-01-26 22:39:04 · 265 阅读 · 0 评论 -
hdu1007(平面最近点对->分治)
主要想弄出一个最近点对的模板出来。。。主要运用分治思想。。思路大概是这样的:先把点按x排序,然后按x进行分治。。。分当然简单。。难点就在合并了。。怎么合并?先找出中点,然后以已经求得的局部最短距离d为基准,将与中点的x距离不超过d的加入集合,然后按y对该点集进行排序,然后枚举点i,再枚举点j,维护最短距离d,如果y距离超过d便不再枚举。。语文不好。。。如果流程不清楚可以看代码或其他原创 2018-02-14 00:23:28 · 327 阅读 · 0 评论 -
poj3608(两凸包间最小距离->旋转卡壳)
这题算法十分诡异。。只是抄了个板子还是不能够很好地理解。。tm都不敢说是原创的了。。。这个是取了A凸包的最低点和B凸包的最高点,作用。。。个人感觉就是保证第一次找的时候是最近点,以便后续进行下去。。然后在A凸包上找点,在B凸包上找边,枚举边,然后在A凸包逆时针找最近点。。由于B凸包边的枚举顺序也是逆时针,所以可以分开枚举。。然后复杂度就降到O(n)了。。更具体的可以去百度。。毕竟窝也挺迷的转载 2018-02-13 14:01:31 · 524 阅读 · 0 评论 -
poj2187(平面最远点对->旋转卡壳)
旋转卡壳真是难读。。。我就是读作xuan zhuan ka ke了怎么着。。_(:зゝ∠)_(强行改输入法求最远点对的思路就是旋转卡壳了。。而理解旋转卡壳的最快方法就是看动画23333旋转卡壳的主要思路就是先把凸包求出来,然后逆时针枚举凸包的每条边,找用最大三角形面积找最远点,由于是逆时针枚举边,所以最远点也是逆时针移动的,这样可以分开枚举,把复杂度降到O(n),然后复杂度还是降在了求原创 2018-02-12 19:30:34 · 431 阅读 · 0 评论 -
poj3130(半平面交模板)
弄了2天区块链结果还是没弄出什么东西来。。然后回来继续学计算几何。。。半平面交的模板还是不太好背的 。。玄学公式+双端队列。。emmmmmm双端队列这东西貌似从斜率优化后就没用到了。。非常生疏。。算法有2个,一个n^2,一个nlogn。。当然选nlogn。。。思路是让半平面按极角排序。。然后依次加入队列中排除多余半平面即可。。细节非常多。。例如:加入队列时要先去队尾再去队首。。原创 2018-02-06 18:55:13 · 224 阅读 · 0 评论 -
poj3335(半平面交)
裸半平面交。。计算几何这个debug难度太大。。还是要学会静态差错。。#include#include#include#include#include#include#define inc(i,l,r) for(int i=l;i<=r;i++)#define dec(i,l,r) for(int i=l;i>=r;i--)#define link(x)原创 2018-02-06 21:31:46 · 187 阅读 · 0 评论 -
poj1175(线性规划)
之前的半平面交一直建立在多边形的基础上,因此遇到更一般的线性规划就显得有点措手不及。。先讲一下线性规划的思路吧:首先是把方程转化为半平面,这对用n^2的人来说并不难。。他们只需要用到直线方程。。然而对使用nlogn的人来说,需要的反而是直线上的2点,这种逆变换感觉并没有什么优雅的姿势去解决。。窝是这么解的。。首先先找出半平面的方向,即倾斜角k。。然后再找特殊点,在特殊点的基础之原创 2018-02-10 19:15:00 · 367 阅读 · 0 评论 -
poj 1873
陈年WF题,纪念一下。。说是练计算几何。。然而这题的主要思路是dfs+剪枝,其实学会恰当的剪枝是非常重要的。。。(到时或许全程就靠这个了?qaq我也想学A叉S搜索orz暴力能300ms以内也算不错了,个人认为本题能够优化一点的地方就是把点都按照价值排序。。回溯时优先考虑不砍树或尽可能砍价值低的树,这样最优方案能够早些出来来排除很多不必要的搜索。。当然标号得记好。。。然后代码看起来十分不原创 2017-12-15 21:05:47 · 222 阅读 · 0 评论 -
poj 1696
一道水题,不过还有点意思。。题目要我们用逆时针的折线尽可能多地把点给连起来,其实在脑海中想象一下情景不难发现如果从当前状态最后的线段中引出一条射线,将其逆时针旋转直到碰到一个点。这需要我们去找到最小的转角,考虑到三角函数中只有余弦函数在0-pi上有单调性,所以用了点积来判断。而此题并不需要用叉积来判断左拐和右拐,因为我们是从外层包进去的,所以必定是左拐。#include#in原创 2017-12-15 14:39:32 · 218 阅读 · 0 评论 -
poj 2954(pick定理)
pick定理:一个计算点阵中顶点在格点上的多边形面积公式,该公式可以表示为2S=2a+b-2,其中a表示多边形内部的点数,b表示多边形边界上的点数,s表示多边形的面积。一个蛮神奇的定理。。用来求内点。。边界点作差求gcd就可以了。。#include#include#include#include#include#include#define inc(i,l,r) for(int原创 2017-12-22 17:03:58 · 227 阅读 · 0 评论 -
poj 3304
搞了一星期竞赛。。。题没写。。作业也没写qaq这个判断是否存在直线使各线段投影都直线上有公共部分。。。假设直线存在,那么在这个公共部分作该直线的垂线必然会与各线段相交,还可以对该直线进行旋转和平移,临界状态是经过2个线段的端点,那么我们可以枚举这2个端点,看经过这2个端点的直线是否与所有线段相交。。当然要注意只有一个线段的情况,还有注意精度问题(题目视坐标差小于eps的点为重合点)#i原创 2017-12-13 16:50:18 · 192 阅读 · 0 评论 -
hdu5448(三角剖分+前缀和)
题意:按逆时针给定一个凸多边形上的点,选取若干个点形成凸包,这些所有凸包的面积之和的2倍这个题以前就碰过,印象深刻(指标题),然后刚好看见tls写了这题的题解就瞄了一眼。。其实。。就只是一个结论而已,一个三角剖分的应用。。令原点和凸包的顶点(逆时针排列)构成的向量分别为,那么利用三角剖分该凸包的面积可以表示为然后就直接考虑的贡献就可以了,演着i->j这个方向至少要有一个点...原创 2019-01-30 00:37:00 · 426 阅读 · 0 评论