
计算几何
计算几何
kelianlee
这个作者很懒,什么都没留下…
展开
-
Closest Pair of Segments HDU - 6697
参考了大佬的题解https://www.cnblogs.com/dd-bond/p/11391771.html直接剪枝#include <iostream>#include <cmath>#include <algorithm>using namespace std;const double eps=1e-8;const double...原创 2019-10-10 14:19:02 · 303 阅读 · 0 评论 -
Picture HDU - 1828(线段树求多边形周长)
有两种方法,第一种就是用两条扫描线扫出来然后求和,对于会wa的数据就是对扫描线排序的时候要注意,第二中方法就扫一次然后求出连续区间的个事因为高就是连续区间的个数*2#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <...原创 2019-03-22 18:25:51 · 212 阅读 · 0 评论 -
Crane POJ - 2991(线段树+计算几何)
线段树维护角度,把线段看成向量然后旋转这个部分有点不好想#include <iostream>#include <cmath>#include <cstring>using namespace std;#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1const i...原创 2019-03-14 23:43:15 · 272 阅读 · 0 评论 -
Atlantis HDU - 1542(线段树+扫描线+离散化)
对于扫描线与离散化的理解比较简单难点在与r-1与r+1的操作,对于一个区间左闭右开!!!#include <iostream>#include <vector>#include <algorithm>#include <cstring>using namespace std;#define lson l,mid,rt<<...原创 2019-03-21 12:18:09 · 152 阅读 · 0 评论 -
Rectangles HDU - 2056(求两个矩形的面积交)
对x与y分别排序就可以#include <iostream>#include <algorithm>using namespace std;struct node{ int id; double num;};bool cmp(node a,node b){ if(a.num==b.num) return...原创 2019-04-21 18:24:25 · 383 阅读 · 0 评论 -
ACM-ICPC Shenyang Machining Disc Rotors(圆)
题意给出一个过原点的圆用一些圆去切割这个圆,求出剩下区域的直径,直径为圆上最长两点的距离(保证切割区域不会相交)题解思路很简单,但是细节比较多:我们首先用atan2算出每个圆的圆心角度对于在第三与第四象限的点为(0到-180)所以我们转化成(180-360)只需要+-360就可以。用余弦定理求出交点的角度,然后对数组排序,遍历数组从中取出剩下区域的角度放到另外一个数组中p2,O(n^2...原创 2019-04-15 20:34:06 · 252 阅读 · 0 评论 -
Geometry Problem HDU - 6242(随机化,覆盖圆)
#include <iostream>#include <cmath>#include <algorithm>#include <cstdio>#include <math.h>#include <ctime>using namespace std;const double eps=1e-8;int sg...原创 2019-04-12 14:16:47 · 151 阅读 · 0 评论 -
An Easy Physics Problem HDU - 5572(直线与圆的关系)
这个题直接自闭到结尾定义p1_1(为p1的方向点)首先判断p1_1与p1的直线与圆的交点如果交点个数小于等于2个只要判断p2点与p1到p1_1的方向向量同向(判断方法为叉积为0说明平行点积大于0说明同向)当直线与圆交点的个数为2时,这时候情况比较特殊,p3_1为与圆的交点离p1最近的点,情况1:p1的方向刚好是往圆那个方向上走去,并且p2点刚好在p1与p3_1这条线段上这时候肯定能碰到!!...原创 2019-04-02 22:08:35 · 173 阅读 · 0 评论 -
2018 ACM 国际大学生程序设计竞赛上海大都会C Rescue(异面线段的距离)
不准备补了,提供一下思路,首先判断四个点是不是共面,如果共面就是判断四个点到对应线段的距离(套板子),如果不是共面,直接求异面直线的距离(套板子)补充原题uva 1469 Ardenia...原创 2019-04-08 00:50:20 · 226 阅读 · 0 评论 -
2018ACM上海大都会赛: A. Fruit Ninja(随机化)
随机化算法,每次随机取两个点那么两个点刚好在所求的直线上的概率为k^2,带入1-(1-k^2)^n公式循环1000次左右就能马上逼近1#include <iostream>#include <cmath>#include <cstdio>#include <time.h>using namespace std;const dou...原创 2019-04-07 22:21:50 · 282 阅读 · 0 评论 -
Circle and Points POJ - 1981(单位圆覆盖)
题解考虑这样的问题以每个点为圆心做半径为1的圆如图ABC,这些圆相交的相交区域如图斜线标出的,在这个区域里面的点到ABC三个点的圆心的距离都是<=1的所以只要在这个区域里面取点做一个半径为1的圆就能把ABC的圆心给圈起来,所以问题就转化成怎么求覆盖的区域,我们用扫描线的思想,B圆与A圆交于点a,a1与C交于点b,b1,我们令方向为逆时针,这个时候每两个交点都有一个入点一个出点,遇到一...原创 2019-04-10 23:17:42 · 692 阅读 · 0 评论 -
Building HDU - 5033离线+斜率凸包
真的是自闭到哭,,一度躺在床上怀疑我是不是要死掉了,,,,根本a不掉,,,结果是错在cont++的位置????????好难过,,,思路简单清晰,离线左右构建凸包维护凸包就好了,,,#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>us...原创 2018-08-26 15:06:29 · 138 阅读 · 0 评论 -
牛客网多校第二场C—message(凸包维护斜率的最值)
鬼知道我经理了什么,这题嗯是的写了一个星期,,,,用凸包来维护斜率,说几个点,1为什么要离线,因为如果你不把询问的点加进去构造凸包的话你用原来构造的凸包并不一定是解所以很巧妙的离线构造,当询问到点是那个点的左边已经是构造好的凸包了只要访问凸包上的点就可以了,右边也是一样的还有注意0.000000#include <iostream>#include <cmat...原创 2018-08-24 00:30:47 · 223 阅读 · 0 评论 -
Get The Treasury HDU - 3642(线段树求矩形面积交加强)
求立体几何的交体积,与二维求矩形面积交相同,写个模板#include <iostream>#include <algorithm>#include <cstdio>#include <vector>#include <cstring>using namespace std;#define lson l,mid,rt&...原创 2019-03-24 01:52:44 · 152 阅读 · 0 评论 -
覆盖的面积 HDU - 1255 面积的交
1.cnt>1 : 说明该区间被覆盖两次或以上,那么长度就可以直接计算,就是该区间的长度剩下的情况就是cnt=1或cnt=02.先看叶子节点,因为是叶子没有孩子了,所以被覆盖两次货以上的长度就是0(无论cnt=1或cnt=0都是0,因为是叶子。。。)3.不是叶子节点 ,且cnt=1.注意这里,cnt=1确切的意义是什么,应该是,可以确定,这个区间被完全覆盖了1次,而有没有被完全覆...原创 2019-03-23 15:13:08 · 114 阅读 · 0 评论 -
Farming HDU - 3255 线段树求立体几何
1a很舒服,#include <iostream>#include <vector>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;#define ll long long#define lson l,mid,rt&...原创 2019-03-24 23:38:12 · 176 阅读 · 0 评论 -
洛谷P1257 平面上的最接近点对
经典的最接近点对问题首先我们将所有的点对x坐标排序,然后采用分治将mid左右两边的最短距离ans求出来,然后我们将mid左右两边的x的距离小于ans的点选出,对其y坐标进行排序即可#include <iostream>#include <algorithm>#include <cmath>using namespace std;const d...原创 2019-10-09 20:54:39 · 423 阅读 · 0 评论 -
Angle Beats HDU - 6731
做这道之前可以考虑做一下hdu5785刚看到这一题想到的做法是(n+q)2log(n+q)离线操作,对每个点做一次极角排序,然后找到匹配的点,对于找90度我们用尺取法,定义两个指针k1,k2。我们让k1遍历每个点k2作为小于90度的第一个点的坐标,下一个点开始时,k1从k2这个点开始遍历。然后我刚开始用的是atan2这个极角排序,后来wa了应该是被卡精度了参考了https://blog...原创 2019-10-09 15:29:07 · 208 阅读 · 0 评论 -
Amphiphilic Carbon Molecules UVA - 1606(扫描线+极角排序)
题意给你一个平面上的n个点,有白点与黑点,问你怎么插入一个隔板使得隔板左右的黑白点数相加值最大。思路我们让隔板至少经过两个点,因为隔壁上的点属于左右两边的点,所以我们可以这么操作。我们枚举每个点,对于其他点建立与这个点的相对坐标,然后极角排序一发,接着就是枚举每两个点设置隔板,求隔板两边的黑白点数了。朴素的做法是我们设i为基准点,l为与i形成隔板的点,r为旋转点,我们让i与l不动,旋转...原创 2019-08-22 22:57:04 · 203 阅读 · 0 评论 -
Cosmic Cleaner(求两球相交体积)
https://blog.youkuaiyun.com/enterprise_/article/details/81624174typedef struct point { double x,y,z; point() { } point(double a, double b,double c) { x = a; y = b; ...原创 2019-04-25 13:55:33 · 498 阅读 · 0 评论 -
Beauty Contest POJ - 2187(旋转卡壳求凸包的直径)
#include <iostream>#include <cmath>#include <cstdio>#include <algorithm>using namespace std;const int maxn=66666;const double eps=1e-8;int sgn(double x){ if(fab...原创 2019-04-24 21:33:44 · 180 阅读 · 0 评论 -
Alyona and Triangles CodeForces - 682E 旋转卡壳找最大三角形
#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>using namespace std;const int maxn=11111;const double eps=1e-8;int sgn(double x){ if(fa...原创 2018-08-28 20:23:15 · 229 阅读 · 0 评论 -
最大土地面积 HYSBZ - 1069 旋转卡壳求最大面积四边形
#include <iostream>#include <cmath>#include <cstdio>#include <algorithm>using namespace std;const int maxn=66666;const double eps=1e-8;int sgn(double x){ if(f...原创 2018-08-27 20:07:29 · 132 阅读 · 0 评论 -
Triangle FZU - 1302 旋转卡壳
#include <iostream>#include <cmath>#include <cstdio>#include <algorithm>using namespace std;const int maxn=66666;const double eps=1e-8;int sgn(double x){ if(f...原创 2018-08-27 01:30:09 · 114 阅读 · 0 评论 -
Largest Triangle Kattis - largesttriangle(求最大三角形模板更新)
#include <iostream>#include <cmath>#include <cstdio>#include <algorithm> using namespace std; const int maxn=66666;const double eps=1e-8; int sgn(double x){ ...原创 2019-04-24 21:25:30 · 683 阅读 · 0 评论 -
ACM-ICPC Xuzhou 2018 Rikka with Illuminations(贪心+计算几何)
题意给你一个凸多边形,在凸多边外有多个灯源,灯源会发射光线,问如果要把整个凸包照射全最少的选择灯源的方案思路对于每个光源找出凸包的上下两个切线,(应该有更快的方法求出?)画个图就能知道用叉积就能判断上下两个切点位置,这里有个技巧我们先找出左边的切点记作x1,对于右切点我们对x1++,让其超过最大的点数n,记作x2,这样我们就能保证x2>x1,这样更好找区间。将每个灯的区间找出来之...原创 2019-04-19 14:49:07 · 432 阅读 · 0 评论 -
Pizza Hub HDU - 6398 (分类讨论)
https://blog.youkuaiyun.com/mitsuha_/article/details/81746486这篇博客就写的很好分两种情况,第一种是一条底边更好跟矩形的边重合,这时候要考虑另一条边是否在这个底边的上部,如果在下部直接return,如果在上部,考虑另一条边在底面的投影的长度与w比较,大的话就return,否则更新答案,计算这两条边的夹角,如果夹角超过90度那么也是不行...原创 2019-04-22 20:54:05 · 346 阅读 · 0 评论 -
ACM-ICPC 2018 沈阳赛区网络预赛 The cake is a lie(单位圆模板加二分)
参考poj1981的博客蜜汁tle,,sort里面写cmp就tle,放到friend里面就过,,,谁能解答一下,,,还有kuangbin的求distance会tle,,为什么#include <iostream>#include <cmath>#include <algorithm>#include <cstdio>#include...原创 2019-04-14 00:23:46 · 193 阅读 · 0 评论 -
fzu 1015(直线的关系)
我不知道规律,但是我在草稿纸上摸索的着猜了一下应该是在所形成的面的多少等线的个数+1+交点个数一发ac#include <iostream>#include <stdio.h>using namespace std;struct Point{ int x,y; Point(){} Point(int _x,int _y) ...原创 2018-07-18 20:17:11 · 146 阅读 · 0 评论 -
Area of Mushroom 自闭题(凸包麻烦)
怎么说呢,,感觉这题在比赛能写出来的几率为0,,,哎自己真的太菜了贴一份数据#include <iostream>#include <cmath>#include <algorithm>#include <cstdio>using namespace std;const int maxn=1111;const double ...原创 2018-08-15 00:37:57 · 149 阅读 · 0 评论 -
A highway and the seven dwarfs POJ - 1912凸包+旋转卡壳+极角排序+离线(二分凸包线段的角度)
是真的激动,这题写了整整两天,当我看到ac的时候是真的开心,可能这就是acm的魅力把,真的好开心啊其中无数次我想要放弃,想着算了还是看看题解那种二分法把,但是最后还是坚持下来了,拿到了数据对着数据debug了一下错在了一个很小的细节。这题解法:凸包,选择卡壳,离线首先呢,思路:判断一堆的点是不是在一条直线的一边我的过程:首先拿到手,二话不说暴力起来,好啦tle一发然后想了一下构...原创 2018-08-13 23:57:06 · 231 阅读 · 0 评论 -
Surround the Trees HDU - 1392(凸包模板)
#include <iostream>#include <cmath>#include <cstdio>#include <algorithm>using namespace std;const int maxn=1000;const double eps=1e-8;int sgn(double x){ if(fabs(...原创 2018-07-26 00:10:58 · 128 阅读 · 0 评论 -
Space Ant OpenJ_Bailian - 1696(极角排序构造)
极角排序构造#include <iostream>#include <algorithm>#include <cmath>#include <cstdio>using namespace std;const int maxn=600;const double eps=1e-8;int sgn(double x){ ...原创 2018-07-24 15:33:25 · 108 阅读 · 0 评论 -
Triangle Partition HDU - 6300 极角排序
#include <stdio.h>#include <math.h>#include <algorithm>#include <string.h>#include <math.h>using namespace std;const double eps = 1e-8;int sgn(double x){ if...原创 2018-07-23 18:49:59 · 190 阅读 · 0 评论 -
A Pilot in Danger! FZU - 1120(判断点在多边形内)
判断点是否在多边形内#include <iostream>#include <cmath>#include <cstdio>using namespace std;const int maxn=100;const double eps=1e-8;int sgn(double x){ if(fabs(x)<eps) ...原创 2018-07-23 16:02:06 · 209 阅读 · 0 评论 -
Points Within ZOJ - 1081(射线法判断点在多边形内部)
4射线法判断是否在多边形内#include <iostream>#include <cmath>#include <cstdio>using namespace std;const double eps=1e-8;const int maxn =1000;int sgn(double x){ if(fabs(x)<eps...原创 2018-07-22 22:46:02 · 145 阅读 · 0 评论 -
Jack Straws POJ - 1127(线段关系+并查集)
3#include <iostream>#include <cmath>using namespace std;const int maxn = 100;const double eps = 1e-8;int sgn(double x){ if(fabs(x)<eps) return 0; if(x<0)...原创 2018-07-22 19:39:19 · 137 阅读 · 0 评论 -
Segments POJ - 3304(直线与线段相交)
/*判断直线与线段的相交wa在没有用sgn!!!!暑假训练 2*/#include <iostream>#include <cmath>using namespace std;const int maxn = 500;const double eps = 1e-8;int sgn(double x){ if(fabs(x)<eps...原创 2018-07-22 16:33:06 · 178 阅读 · 0 评论 -
hdu 2150(规范与不规范相交)
https://blog.youkuaiyun.com/small__snail__5/article/details/52190284判断线段相交,但是自己的方法一直wa不知道为什么看了题解过了#include <iostream>#include <cmath>#include <stdio.h>using namespace std;co...原创 2018-07-18 18:37:54 · 272 阅读 · 0 评论 -
hdu 1086(判断线段相交)
判断线段是否相交,我的方法居然a掉了很奇怪!!!第200题纪念一下,同时暑假刷题开始!!!#include <iostream>#include <stdio.h>using namespace std;struct Point{ double x,y; Point(){} Point(double _x,double _y) ...原创 2018-07-18 06:06:05 · 172 阅读 · 0 评论