
几何
文章平均质量分 58
Frozen_Guardian
已退役菜鸡Acmer
展开
-
(转)计算几何模板 - kuangbin
转自:https://kuangbin.github.io/2019/04/28/20190428/#more二维几何// `计算几何模板`const double eps = 1e-8;const double inf = 1e20;const double pi = acos(-1.0);const int maxp = 1010;//`Compares a double ...转载 2020-01-27 12:25:37 · 960 阅读 · 0 评论 -
2021牛客多校6 - Hopping Rabbit(矩形取模+扫描线)
题目链接:点击查看题目大意:二维平面给出 nnn 个矩形,现在要求找到一个点 (x+0.5,y+0.5)(x+0.5,y+0.5)(x+0.5,y+0.5),满足对于任意的 (x+0.5+k1d,y+0.5+k2d)(x+0.5+k_1d,y+0.5+k_2d)(x+0.5+k1d,y+0.5+k2d) 都不会出现在任意一个矩形中题目分析:假设我们找到的目标点为 (x,y)(x,y)(x,y),不难每次移动目标点,对于每个矩形来说,对 ddd 取模后的相对坐标都是不变的,所以我们不妨将每个矩形都对原创 2021-08-02 23:35:11 · 477 阅读 · 0 评论 -
CodeForces - 1549F1 Gregor and the Odd Cows (Easy)(几何+数论)
题目链接:点击查看题目大意:给出二维平面上的 nnn 个点,任意选择出三个点可以构成一个三角形,现在问满足下面条件的三角形的个数:三角形面积为整数三角形包含的(不包括边界)整数点为奇数其中所有坐标点的 xxx 和 yyy 都是偶数题目分析:因为所有坐标点都是偶数,所以先猜一波任意三个点都是满足第一个条件的,也就是围成的三角形面积一定是偶数。所以现在问题就转换为了,如何求解满足第二个条件的三角形的个数。赛中经队友提醒,得知了“皮克定理”这一关键的结论,即 S=a+b2−1S=a+\frac{b原创 2021-08-02 20:25:11 · 234 阅读 · 0 评论 -
2021牛客多校2 - Girlfriend(球体积交)
题目链接:点击查看题目大意:空间内有6个点,满足 ∣P1A∣≥k1∣P1B∣,∣P2C∣≥k2∣P2D∣|P_1A|\ge k_1|P_1B|,|P_2C|\ge k_2|P_2D|∣P1A∣≥k1∣P1B∣,∣P2C∣≥k2∣P2D∣,求 P1,P2P_1,P_2P1,P2 各自轨迹围成的空间体的体积交题目分析:三维坐标系中两点之商为定值的话表示的是一个球壳,叫阿波罗尼斯球壳囤个板子,求两球体积交的代码:// Problem: Girlfriend// Contest: Now原创 2021-07-23 16:43:43 · 214 阅读 · 0 评论 -
上海理工大学第二届“联想杯”全国程序设计邀请赛 - Experiment Class(几何+三分套三分)
题目链接:点击查看题目大意:在二维平面的第一象限中给出两条射线代表河流,再给出起点和终点,问从起点出发,至少经过两条河各一次后到达终点的最短路题目分析:如果只有一条河的话就是初中数学的经典问题了,现在加上了两条河无非就是多了分类讨论,但是分类讨论写的那份代码过了 96% 多,还是算了吧考虑三分套三分,当在某条河上确定了一个交点后,可以通过三分去寻找另一条河交点的最短路,所以是可行的需要注意的是,因为整个矩阵的大小最大是 100∗100100*100100∗100 的,在此之中河流的最大长度实际上是对原创 2021-06-18 11:23:50 · 201 阅读 · 0 评论 -
牛客 - Dance with a stick(大风车模型)
题目链接:点击查看题目大意:二维平面给出 nnn 个点,满足任意三个点不在一条直线上。需要选出一条经过某个点的有向直线,满足执行 “大风车” 后直线的角度反转到 180180180 度时,回到初始的起点“大风车” 指的是直线顺时针旋转,若碰到了某个点 ppp,则以点 ppp 为新的轴心继续旋转,持续这个过程题目分析:解析该模型的视频:https://www.bilibili.com/video/BV164411k7e3省流结论:找到一条经过某个点的直线,使得左右两侧的点个数相同代码:// Pro原创 2021-06-02 16:37:00 · 278 阅读 · 2 评论 -
CodeForces - 1455E Four Points(数学+几何)
题目链接:点击查看题目大意:给出四个点,问最少移动多少步,可以使得四个点围成的矩形是正方形(这里的正方形允许退化成点)题目分析:比赛时写了个三分,然鹅又双叒叕不知道哪里写崩了,还是太菜了呀首先对于四个点全排列,枚举每个点分别属于正方形的哪个位置,方便起见我设:p[ 0 ] 是左上角,p[ 1 ] 是右上角,p[ 2 ] 是左下角,p[ 3 ] 是右下角不难看出 x 坐标与 y 坐标是相互独立的,所以这里只讨论如何求解最优的 x,关于 y 的话类比过去就好了对于最终的正方形来说,p[ 0原创 2020-12-02 11:26:07 · 1261 阅读 · 0 评论 -
CodeForces - 993C Careful Maneuvering(几何+暴力+状态压缩)
题目链接:点击查看题目大意:在 x = -100 的直线上有 n 个敌方飞船,在 x = 100 的直线上有 m 个敌方飞船,现在在 x = 0 的直线上可以选择两个点作为诱饵,使得两侧的飞船瞄准射击,问如何才能击落尽量多的飞船题目分析:因为 n 和 m 只有 60,所以在 x == 0 时至多有 n * m 个交点,然后去 O( n^2 ) 去枚举交点暴力计算答案即可,对于每个交点来说,状压记录一下两侧可以击落的飞船,然后维护一下最大值就好了更简单的一个思路就是,因为两侧的飞船分别位于 x =原创 2020-11-25 21:39:23 · 329 阅读 · 0 评论 -
中石油训练赛 - Gone Fishing(固定大小的圆可以覆盖最多的点)
题目大意:在二维平面中给出 n 个点,再给出一个固定大小的圆,问如何放置这个圆可以使其覆盖最多的点题目分析:首先不难想到一种 n^3 的做法,就是两层循环去枚举两个点,因为两个不同的点就可以确定下来两个圆了(对称的),然后对于这 2 * n * n 个圆的每一个来说,再用一层循环去枚举 n 个点,计算一下有多少个点可以被覆盖到就可以了考虑优化,假如分别以点 i 和点 j 为圆心,以 r 为半径做出两个相交的圆,比较显然的是,如果在相交的阴影部分中任选一点作为圆心,同样以 r 作为半径做圆,那么点..原创 2020-10-12 22:10:49 · 1107 阅读 · 2 评论 -
HihoCoder - 1879 Rikka with Triangles(极角排序求所有锐角三角形的面积)
题目链接:点击查看题目大意:给出 n ( n <= 2000 ) 个点,求出所有不同的锐角三角形的面积题目分析:n^3 暴力枚举肯定是不可以的,和之前写过的一个题目思路很像:HDU-5784所以这个题目的思路就是,枚举所有的角,如果是锐角的话贡献为 1,如果是钝角或直角的话贡献为 -2,最后相加除以 3 即可,可行性的证明可以直接列举一下三种三角形的情况:锐角三角形:三个角都是锐角,计算出的贡献为 3 倍的面积 直角三角形:一个角为直角,其余两个角都为锐角,直角的提供-2 倍的贡献.原创 2020-09-16 17:27:06 · 357 阅读 · 0 评论 -
Gym - 102460L Largest Quadrilateral(几何-凸包+旋转卡壳求最大的四边形面积)
题目链接:点击查看题目大意:在笛卡尔坐标系上给出 n 个点,要求选出四个点,使得组成的四边形面积最大,求出这个最大的面积,注意此处组成的四边形不是严格意义上的四边形,只需要选四个点就行题目分析:首先猜也能猜出来四边形的四个点在凸包上肯定是最优的,所以我们可以 nlogn 求出凸包,不难想到的一个 n^3 的算法就是,n * n 去枚举对角线,这样就能将四边形划分为两个三角形,然后 O( n ) 去枚举三角形另一个的顶点,在对角线的两侧分别找到一个点使得这两个三角形的面积最大,维护一下这个面积的最大值原创 2020-09-14 16:07:48 · 836 阅读 · 4 评论 -
HDU - 5572 An Easy Physics Problem(几何-碰撞问题)
题目链接:点击查看题目大意:在一个二维平面上,给出一个实心圆柱体,再给出一个可以视为质点的小球,小球初始时位于点 A ,会给出一个速度向量 VA,当小球碰到圆柱体时,会因碰撞弹开,规定碰撞不会丢失动能,问在小球在运动的过程中能不能到达点 B题目分析:稍微画一下图:为了方便表示射线,我在无穷远处计算出了一个点 inf,这样射线 A就转换为了线段 ( A , inf ),同理图中的 l1 和 l3 都是以线段表示的射线,图中点 P 表示为圆心,G1 和 G2 表示 l1 与圆的两个交点,规定 .原创 2020-09-03 16:57:23 · 333 阅读 · 0 评论 -
HDU多校3 - 6798 Triangle Collision(几何+旋转坐标系)
题目链接:点击查看题目大意:给出一个等边三角形的区域,再给出初始时一个质点的位置 ( x , y) 和初始速度 ( vx , vy ) ,现在质点会不断运动,当碰到三角形的内壁时会根据角度反弹,问小球第 k 次碰到三角形的内壁的时间题目分析:k 非常大,肯定不能暴力去模拟每一次小球的运动,借用题解的一句话更好理解:灵感来自用激光笔往镜子中射入激光被多次反射。人眼从激光笔的视角来看,光束并没有被 “反射”,而是穿入了 “镜子中的世界”。将二维平面视为无穷大,大概就是这样互相拼接而成.原创 2020-07-31 01:34:19 · 594 阅读 · 0 评论 -
牛客多校3 - Operation Love(几何+叉积确定三点顺逆)
题目链接:点击查看题目大意:在平面直角坐标系中给出一只手的轮廓,需要判断是左手还是右手题目分析:因为这些点在给出时不能确定时顺时针还是逆时针给出,所以我们需要自己来判断,这里存一下给出三点判断顺时针还是逆时针的板子(其实就是个叉积计算三角形面积的应用),当判断出给出的图形是顺时针还是逆时针输入的时候,无非只有四种情况,分类讨论一下就好了,这里我选择的是最底下的长度为 9 的边和两侧长度分别为 6 和 8 的边讨论因为题目给出的数据误差较大,所以在比较大小的时候,要么eps设的大一点,或者可以原创 2020-07-19 13:44:17 · 854 阅读 · 0 评论 -
牛客多校2 - Keyboard Free(几何)
题目链接:点击查看题目大意:给出三个同心圆,从三个同心圆上分别选择三个顶点组成一个非退化的三角形,求三角形面积的期望题目分析:参考博客:http://www.koule2333.top:3000/s/HJn9liYyw借图:如图所示,在利用向量表示出三角形的面积后,会带有两个以角度为变量的参数,且积分时带有绝对值,因为题目对精度的要求不高,所以我们可以将角度做等分,因为时间给的充足,所以我做的是 500 等分另外向量叉积的运算公式如下:因为只是第三维都为零,所以答案就是了原创 2020-07-16 19:51:30 · 409 阅读 · 0 评论 -
牛客多校2 - Boundary(几何)
题目链接:点击查看题目大意:给出 n 个点,需要我们选择一个经过原点的圆,使得这个圆经过尽可能多的点,输出最多可以经过多少个点题目分析:n 的大小是 2000 ,显然支持 n * n 最多再加一个 log 的写法,因为三个不共线的点确定一个圆,圆上的一个点(原点)已经确定了,所以我们可以 O( n ) 枚举一下另一个定点 P,此时大概是这个样子最后 O( n ) 枚举点 A 时,此时不共线的三点已经可以确定一个圆了,换句话说,三个点就可以确定下来圆心的位置了,当点 P 和点 O 都确定下来后原创 2020-07-14 00:58:47 · 438 阅读 · 0 评论 -
牛客 - 四等分的角度(几何)
题目链接:点击查看题目大意:输入 A , O , B 三个点的坐标,输出 K1 , K2 , K3 分别为角 AOB 四等分线上的点题目分析:吐了吐了,这个题想到了一种解法,但是在实现的时候被高中的向量知识卡住了,要是这个题能过的话这次的红包应该能领不少呜呜呜说回题目,借题目的图一用:为了方便讲解,就将三条四等分线从左到右称为 XP , XC , XQ ,其中点 O 被我替换成...原创 2020-05-02 20:46:58 · 932 阅读 · 0 评论 -
CodeForces - 1300D Aerodynamic(几何+思维)
题目链接:点击查看题目大意:给出一个凸多边形,将凸多边形通过平移,使平移后的凸多边形可以将原点包含在内(在边或点上也算),所有满足条件的凸多边形所形成的新图形,一定是一个凸多边形,问新图形和原图形是否为相似图形题目分析:这个题光读题可能不太好读明白,但是看了样例给出的图示后大概就能明白题意了,其实题目做起来比较简单,将给出的样例在纸上稍微画画就可以大胆猜测了,满足相似的充分必要条件是点数为...原创 2020-02-12 01:03:54 · 343 阅读 · 0 评论 -
HDU - 5784 How Many Triangles(计算锐角三角形的个数)
题目链接:点击查看题目大意:给出 n 个点,计算有多少个锐角三角形题目分析:直接枚举点计算的话不太好办,因为 n 给到了 2000 ,直接枚举的话复杂度到了 n^3 ,但正难则反,我们考虑一下锐角三角形是由三个锐角组成的,而钝角三角形和直角三角形是由两个锐角 + 一个非锐角组成的,所以我们可以先计算出所有锐角的个数 ans ,以及所有非锐角的个数 not_ans ,那么答案显然是 ( an...原创 2020-02-08 01:40:35 · 790 阅读 · 1 评论 -
牛客 - umi和弓道(几何+贪心)
题目链接:点击查看题目大意:在一个二维平面上,给出一个初始点 P ,接下来给出 n 个点当做靶子,现在初始节点会射击每个靶子,我们可以进行的操作是在 x 轴或 y 轴上建造一段连续长度的木板,使得初始点 P 无法射击到木板后方的靶子,规定木板只能在 x 轴或 y 轴上建造连续的一段,不许拐弯,问最短需要建造多长的木板,才能让点 P 最多只能射击到 k 个靶子,如果无解,输出 -1题目分析:...原创 2020-02-04 22:51:20 · 300 阅读 · 0 评论 -
UVA - 11437 Triangle Fun(简单几何)
题目链接:点击查看题目大意:给出三个顶点A,B,C组成三角形,如题目中的图片所示,规定D,E,F分别为三条边的三等分点,现在要求三角形RPQ的面积题目分析:利用向量先求出DEF三点,再利用线段相交求出RPQ三点,最后利用海伦公式直接求答案,还是考察了模板的配合代码:#include<iostream>#include<cstdio> #includ...原创 2020-02-03 17:11:26 · 240 阅读 · 1 评论 -
Gym - 102361A Angle Beats(几何)
题目链接:点击查看题目大意:给出n个点,再给出m个询问,每次询问给出一个点 x,我们需要回答包括点 x 的直角三角形有多少个题目分析:题目比较直接,数据也比较小,支持n*n的算法处理,首先我们必须知道,如果要包括点 x 所组成三角形,那么点 x 可以在直角点上,也可以在非直角点上,比较容易想到的方法是离线处理,我们需要分类讨论,也就是上述两个情况,对于每个询问而言,以点 x 为相对原点,对...原创 2020-01-29 02:17:55 · 886 阅读 · 5 评论 -
HDU - 3629 Convex(计算凸四边形个数)
题目链接:点击查看题目大意:给出n个点,计算能组成的凸四边形个数题目分析:朴素方法是枚举四个点,n^4的复杂度,而这个题目的n给到了700,显然是不行的,既然点的个数比较大,正难则反,我们考虑组合数学,首先n个点能组成C(n,4)个四边形,我们只要减去凹四边形的个数就是答案了,我们记凹四边形的个数为ans,凹四边形,换一种说法,就是取三个点组成的三角形,问有多少个点落在三角形内,那么三角形...原创 2020-01-28 17:19:00 · 836 阅读 · 0 评论 -
POJ - 1584 A Round Peg in a Ground Hole(综合几何)
题目链接:点击查看题目大意:给出n个点,以及一个圆心和半径,首先判断这n个点能否构成凸包,若能,继续判断圆是否在凸包内题目分析:这个题目确实非常综合,考察了判断凸包问题,判断圆是否在凸包内,只要保证圆心在凸包内,以及圆心到每条边的距离小于等于半径即可,说到底还是考察了模板是否靠谱,不得不佩服kuangbin大神的模板真的牛,一套用下来没有一点bug,直接贴代码吧,全是模板,懒得删减,所以有...原创 2020-01-28 01:23:15 · 250 阅读 · 0 评论 -
POJ - 2826 An Easy Problem?!(计算几何,好题)
题目链接:点击查看题目大意:给出两条线段,问组成的容器最多能接多少雨水题目分析:既然是接雨水,那么肯定只能是漏斗状,很容易排除掉两种情况:其中有一条线段平行于x轴 两条线段不相交还有一种比较难想的情况kuangbin大神提到了,那就是封口的情况,对应就是以下三种情况:单独讨论之后,剩下的情况就一定有解了,直接按照三角形的面积计算就是答案了注意结果需要加上一个eps防止出...原创 2020-01-28 00:52:56 · 285 阅读 · 0 评论 -
POJ - 3347 Kadj Squares(思维+几何)
题目链接:点击查看题目大意:给出n个正方形的边长,每个正方形必须与x轴有交点,且交点必须小,还需要满足每个正方形与x的交点依次递增,在满足以上条件的前提下,将所有的正方形防止在二维平面上,现在问从x轴上方向下俯视,能直接看到哪些正方形题目分析:伪装成几何题目的思维题,用到的几何知识无非是坐标转换,更多的是思维,因为题目的要求限制了正方形摆放的方式唯一,我们可以将每个正方形抽象成一个线段,计...原创 2020-01-27 23:32:30 · 322 阅读 · 0 评论 -
POJ - 1696 Space Ant(极角排序)
题目链接:点击查看题目大意:现在有一只特殊的蚂蚁,它会按照以下规则尽可能长的寻找路径:不能回头 不能右转 只能逆时针行走现在给出n个点,输出最长的路径题目分析:既然是逆时针旋转,那么每次只能走极角最小的一个,每次都排序找就可以了,时间复杂度是n*n*logn,极角排序的cmp函数还是用这张图代码:#include<iostream>#include&l...原创 2020-01-27 22:12:26 · 304 阅读 · 0 评论 -
POJ - 3304 Segments(简单几何)
题目链接:点击查看题目大意:给出n条线段,现在问是否存在一条直线,使得所有线段向这条直线的投影存在一个共同的交点题目分析:题意有点抽象,需要转换一下,因为所有的线段向某一条直线的投影存在一个交点,那么在那条直线上,从交点位置开始,沿着垂直于直线的方向做另一条直线,会发现这条直线与n条线段都存在一个交点,也就是都相交,这样题目就转换为了是否存在一条直线,使得与n条线段都有交点因为直线也是...原创 2020-01-27 16:47:16 · 256 阅读 · 0 评论 -
POJ - 1556 The Doors(线段相交+最短路)
题目链接:点击查看题目大意:给出一个房间,房间内有许多墙壁(最多18堵墙),现在要从(0,5)点到(10,5)点,问最短路程是多少题目分析:若要使路程最短,肯定要在两点之间前进,这样我们可以在建好墙后,根据线段相交问题渐变,判断两个点之间是否有线段挡着,如果没有挡着,直接建边,边权为两点的直线距离,如果被挡着了,也就是存在一条线段和当前线段规范相交,则说明两点无法直接到达,则边权置为无穷大...原创 2020-01-27 16:41:49 · 243 阅读 · 0 评论 -
POJ - 2318 TOYS(叉积+二分)
题目链接:点击查看题目大意:给出一个盒子,由n条互不相交的线段分割为n+1个空格,现在有m个玩具的坐标,现在问每个空格内有多少个玩具题目分析:利用叉积的性质判断点在直线的哪一侧:以点在直线左侧为例,对于一个点来说,n条线段就具有了单调性,以此二分找到该点右边的直线,则就确定了当前点所在的空格了代码:#include<iostream>#include<...原创 2020-01-27 13:45:12 · 249 阅读 · 0 评论 -
CodeForces - 123B Squares(简单几何+旋转坐标系)
题目链接:点击查看题目大意:给出一个无限大的二维坐标平面,现在有一些坏点,规定: 满足以上两条件之一的点即为坏点,现在问最少经过多少个坏点的情况下,可以从起点到达终点题目分析:一开始没想到坏点是如何分布的,看了网上题解的画图后恍然大悟了,这里借用一下图片:来自:https://blog.youkuaiyun.com/nyist_zxp/article/details/39927781...原创 2020-01-21 17:29:32 · 414 阅读 · 0 评论 -
HDU - 3126 Nova(最大流+二分+简单几何)
题目链接:点击查看题目大意:给出一个二维平面坐标系,其中有n个巫师,m个敌人,以及k棵树,规定每个巫师都有一个攻击范围,可以攻击以巫师为圆心,以攻击范围为半径,形成的圆内的所有敌人,对于每棵树都有一个半径,规定以每棵树为圆心,以半径形成的圆都是障碍物,若巫师和敌人之间被至少一棵树遮挡(直线),则巫师无法攻击敌人,每个巫师的攻击都有冷却时间,现在问至少需要多长时间才能消灭所有敌人,若无法消灭所有...原创 2020-01-03 02:26:09 · 233 阅读 · 0 评论 -
POJ - 3714 Raid(平面最近点对模板题,几何)
题目链接:点击查看题目大意:给出两个含有n个点的集合,在两个集合中分别任选一点,使得这两个点之间的距离最小题目分析:因为n给到了1e5,所以n*n的暴力肯定是不行了,直接从网上copy了个分治优化的模板,时间复杂度为nlogn,可以求出n个点中相距最近的两个点的距离,对于这个题目而言,我们将两个集合中的点分个类,在求距离的时候,若是同类的点,直接返回无穷大即可,这样同类的点肯定不可能是答案...原创 2019-12-03 17:24:09 · 258 阅读 · 0 评论 -
(转)二维平面坐标系-最近点对模板
插眼大佬博客:https://www.cnblogs.com/wt20/p/5803349.html用法:将N个点读入后用cmpx函数排序,然后直接调用findMin函数即可,参数为(0,n-1),时间复杂度为nlogn代码:const int N=1e5+100;//点的数量struct Point{ double x,y;}point[N];int y_sor...转载 2019-12-03 17:18:46 · 448 阅读 · 0 评论 -
HDU - 3694 Fermat Point in Quadrangle(三分套三分/凸包)
题目链接:点击查看题目大意:给出四个点,求出该四边形的费马点,费马点是求得一个点,到这四个点的距离最小,最后输出距离,题目分析:三分套三分,外层三分x,内层三分y即可,不过就是目前来说遇到的所有三分问题都过于玄学,有时候样例过不了却A了,有时候自认为没问题却WA了数十发,这里要改一下以前的书写习惯,以前总喜欢这样写:double mid=(l+r)/2;double mmid=(...原创 2019-10-18 15:50:55 · 322 阅读 · 0 评论 -
凸包模板(Graham算法)
因为某些原因被迫学习几何知识。。先从网上拿个模板来用用用处:可以按照极角排序,依次找出凸包边界的点const int N=10;int n=4,tot;struct node{ double x,y;}a[N],p[N]; double dis(node A,node B) //距离{ return sqrt((B.x-A....转载 2019-10-18 16:23:15 · 617 阅读 · 0 评论