
计算几何
文章平均质量分 81
Ezereal
这个作者很懒,什么都没留下…
展开
-
二维几何基本模板
#include #include #include #include #include #include #include #include #include #include using namespace std;#define L(i) i<<1#define R(i) i<<1|1#define INF 0x3f3f3f3f#define pi acos(-1原创 2015-10-16 21:10:15 · 482 阅读 · 0 评论 -
Codeforces Round #358 (Div. 2) E. Alyona and Triangles (找面积最大三角形)
题意给你n个点,保证覆盖的面积不超过S。你需要找到一个面积小于4S的三角形,使得这个三角形包含了所有的点。题解:有一个结论,需要猜一下。就是我其实就是找到这个n个点,中选择三个点组成的最大三角形。找到这个三角形之后,通过旋转和放大之后,就可以得到我要的答案了。#include #include #include #include #include #i原创 2016-10-07 15:34:25 · 461 阅读 · 0 评论 -
Codeforces Round #357 (Div. 2) E. Runaway to a Shadow 计算几何
题意有一个蟑螂,在x0,y0点,每秒移动,可以移动T秒,T秒后不在阴影中就会被拍死阴影都是圆,现在给你圆心坐标和圆的半径。这个蟑螂是随机选择一个方向走的问你这个蟑螂活下来的概率是多少题解:蟑螂和圆都会有一个角度的区间,表示在T秒内能够到达这个阴影中然后把所有区间拿出来,取并集然后再除以2pi就好了思路很简单。取区间的这个东转载 2016-10-06 19:30:50 · 414 阅读 · 0 评论 -
HDU 5572 2015 上海区域赛 A题 计算几何(碰撞反弹)
题意:给一个圆和圆外两点A、B,在A以给定的速度(方向)出发,若碰到圆则发生完全弹性碰撞,问能否经过B。题解:把b点对称过去,判断与a点斜率是否等于v,然后考虑一些特殊情况,比如射线交不到圆,经过b点再交圆等,最后ok函数要写好。。。#include #include #include #include #include #include #include #include原创 2016-10-04 16:36:56 · 854 阅读 · 0 评论 -
HDU 4116 Fruit Ninja ( 计算几何 + 扫描线 )
给你最多1000个圆,问画一条直线最多能与几个圆相交,相切也算。显然临界条件是这条线是某两圆的公切线,最容易想到的就是每两两圆求出所有公切线,暴力判断一下。可惜圆有1000个,时间复杂度太高。网上题解的做法是枚举每个“中心圆”,求出这个圆与其他圆的切线,然后按极角排序,扫一圈。把每条切线看成扫入线——添加一个圆,或扫出线——删除一个圆。形象一点就是一条与中心转载 2016-09-26 10:06:57 · 762 阅读 · 0 评论 -
Codeforces Round #346 (Div. 2) D Bicycle Race (叉积)
NoteThe first sample corresponds to the picture:The picture shows that you can get in the water under unfortunate circumstances only at turn at the point (1, 1). Thus, the answer is 1.转载 2016-09-14 22:02:54 · 298 阅读 · 0 评论 -
Codeforces Peter 614 C and Snow Blower
计算几何: 计算一个多边形绕着圆心旋转一周所得区域的面积,通过样例就可以看出应该是是一个圆环,所以只需要找到图形上到圆心的最远点和最近点即可,最远点一定在点上,最近点可能在点上可能在边上,具体判断方法是:由于点的给出方法为顺时针或逆时针,所以只需要O(n)扫一遍环即可,利用余弦定理去判断形成的角是否为钝角,(即最近点是不是在给定的边上)如果是钝角的话那么则取两个端点的最小值,如果不是的话则利用转载 2016-08-23 21:56:38 · 498 阅读 · 0 评论 -
三维计算几何模板 hdu 5733 tetrahedron(不知为何WA)
#include #include #include #include using namespace std;#define L(i) i<<1#define R(i) i<<1|1#define INF 0x3f3f3f3f#define pi acos(-1.0)#define eps 1e-9#define maxn 2000010#define MOD 10000原创 2016-07-20 16:44:57 · 1075 阅读 · 0 评论 -
hdu 4353
先简单说说这道题的题意吧,题目讲的大概是个挖金矿的故事,首先分别给出n个普通点(这些点是你可以自己选择的用来圈金矿的点),以及m个金矿所在点。你所需要计算的,就是从n中任意选择x个点(3好了,题目的要求是输出最高的性价比,那么怎么得到这个性价比呢?首先3000MS的时间虽然足够你暴力的了,但并不意味着真的足够随便暴力枚举,尤其是n的最大取值是200。200个点所能组成的多边形数目是很可怕的原创 2015-11-02 22:01:09 · 409 阅读 · 0 评论 -
UVA 11800 Determine the Shape
题意:给定四个点,判断其形状。形状优先顺序:正方形,矩形,菱形,平行四边形,梯形,普通四边形。题解:一来就被坑了,看太明白题目也是死的货。。题目中告诉我们不存在三点共线,可为毛我是特判了共线输出普通四边形才过的。。我是先用凸包排好顺序,顺便判断是否有三点共线。特判三点共线的情况。然后判断对边平行(用叉积)的条数。条数为2时,判断相邻两边是否成直角(用点积),成直角中相邻边长原创 2015-10-06 15:11:58 · 398 阅读 · 0 评论 -
UVA 10256 The Great Divide
判断由红点和蓝点分别组成的两个凸包是否相离,是输出Yes,否输出No。训练指南上的分析:1.任取红凸包上的一条线段和蓝凸包上的一条线段,判断二者是否相交。如果相交(不一定是规范相交,有公共点就算相交),则无解2.任取一个红点,判断是否在蓝凸包内。如果是,则无解。蓝点红凸包同理。其中任何一个凸包退化成点或者线段时需要特判。其实只需要把上面两个判断顺序颠倒一下,原创 2015-10-06 14:35:35 · 649 阅读 · 0 评论 -
UVa 10256 (计算几何基础摸板)
判断由红点和蓝点分别组成的两个凸包是否相离,是输出Yes,否输出No。训练指南上的分析:1.任取红凸包上的一条线段和蓝凸包上的一条线段,判断二者是否相交。如果相交(不一定是规范相交,有公共点就算相交),则无解2.任取一个红点,判断是否在蓝凸包内。如果是,则无解。蓝点红凸包同理。其中任何一个凸包退化成点或者线段时需要特判。其实只需要把上面两个判断顺序颠倒一下,原创 2015-10-06 14:41:07 · 468 阅读 · 0 评论 -
UVA 11168 - Airport (Andrew算法)
题意:给出平面上n个点,找一条直线,使得所有点在直线的同侧(也可以再直线上),且到直线的距离之和尽可能小,求最小的平均距离思路:要求所有点在直线同侧,因此直线不能穿过凸包。不难发现,选择凸包上的边所在的直线是最优的。关键是求所有点到直线的距离,我们可以枚举每一条凸包上的边,把直线用点斜式表示出来,然后通过一般式求出所有点到直线的总距离。由于所有点在Ax+By+C =原创 2015-10-06 13:21:34 · 414 阅读 · 0 评论 -
UVA 11178 Morley's Theorem(二维几何基础)
题意:给定一个三角形,求每个角的三等分线相交形成的三角形的三个坐标题解:直接模板#include #include #include #include #include #include #include #include #include #include using namespace std;#define L(i) i<<1#define R(i) i<<1原创 2015-10-05 16:09:52 · 389 阅读 · 0 评论 -
UVA 11796 Dog Distance(二维几何基本模板)
题目大意:甲和乙两条狗分别沿着一条折线跑,它们速度未知,但同时出发并且同时到达终点,并且都是匀速奔跑。求奔跑过程中两只狗的最大距离与最小距离之差。思路:因为运动是相对的,我们可以认为甲静止不动,乙沿着直线走。则问题就转化为点到线段的最小距离。那么,我们对于每段分析,看谁先到达该线段的终点,则该段可以用上面的方法求。把a看成不动的,则有b运动到了cb+vb-v原创 2015-10-05 16:49:27 · 467 阅读 · 0 评论 -
凸包之三道模板应用题
虽然有了现成的凸包算法,但是还有一些求得凸点前期或后期类问题需要自己解决。在这里来个小小的总结。先贴出求凸包的算法:#include #include #include using namespace std;const int N=5e4+10;struct point{ int x,y;}p[N];int dis(point a,point b){ r转载 2016-10-07 15:56:24 · 387 阅读 · 0 评论