计算几何
文章平均质量分 59
半碗无糖蓝莓冻
这个作者很懒,什么都没留下…
展开
-
LightOJ 1292 - Laser Shot(计算几何)
链接 Laser Shot题意给出n个点,问一条线最多经过几个点;思路刚开始想的直接暴力 n3n ^ 3n3 ,T了一页,后来优化了函数,卡过去了;看了别人的博客,发现可以用map记录斜率,把代码优化成 n2log(n)n^2log(n)n2log(n)的;AC代码n3n ^ 3n3#include <bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long原创 2021-09-14 22:27:18 · 136 阅读 · 0 评论 -
LightOj 1206 - Race Track(计算几何 + 点到线段最短距离)
链接 Race Track题意给出两个多边形,一个在内,一个在外,保证两个多边形没有任何相交,现在要在多边形内放一个圆,能自由穿行,求最大半径;思路在两个多边形内自由穿行,就是找内多边形的点到外多边形的边的最短距离的最小值,枚举即可;写题解的主要原因是对这个最短距离的求法有了较为清晰和美观的模板;double get_point_distance(PDD a, PDD b) { return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (原创 2021-09-14 20:48:53 · 138 阅读 · 0 评论 -
LightOj 1190 - Sleepwalking(计算几何 + 射线法判断点和多边形关系)
链接 Sleepwalking题意给出一个点和一个多边形,判断点是否在多边形内(点在多边形边上也算多边形内部);思路对于点来说,每次去遍历多边形的每条边:如果点在多边形上,直接输出在多边形内;如果射线和多边形的这条边平行,则跳过本次循环;对于射线经过多边形的点的情况,我们把经过的点假设在射线的上侧即可;剩下的就是普通情况,求是否相交即可;最后看穿越了几次多边形,如果是偶数则说明没在多边形内,否则就在多边形内;AC代码#include <bits/stdc++.h>#原创 2021-09-13 20:37:56 · 122 阅读 · 0 评论 -
2021东北省赛 J. Transform(计算几何 + 罗德里格斯旋转公式)
链接 J. Transform题意给出两个点求第二个点绕从原点到第一个点这条轴旋转 rrr 或 −r-r−r ,得到两个点,输出 zzz 坐标最大的那个点;思路刚开始想的旋转坐标轴,然后旋转点,再旋转回去,过于复杂了;这个题用 罗德里格斯旋转公式 可以直接秒v′⃗=v⃗+sinθ∗k⃗×v⃗+(1−cosθ)∗k⃗×(k⃗×v⃗)\vec{v'}=\vec{v} + sin\theta*\vec{k}\times\vec{v} + (1-cos\theta) * \vec{k} \times(\原创 2021-09-11 16:56:22 · 247 阅读 · 0 评论 -
STDOJ pyf的圆圈 & [HAOI2008] 下落的圆盘(计算几何)
链接luogu 下落的圆盘题目思路每个圆只会被它后面的圆盘覆盖,然后对于每个圆求一下覆盖的圆弧的角度,最后让 2∗π−angle2*\pi - angle2∗π−angle即可;对于角度的计算,我们只需要算出 ∠BAC\angle BAC∠BAC 和 ∠BAD\angle BAD∠BAD 即可,然后算出覆盖的圆弧的角度范围 l=∠BAD−∠BACl = \angle BAD - \angle BACl=∠BAD−∠BAC, r=∠BAD+∠BACr = \angle BAD + \angle B原创 2021-09-10 21:42:32 · 100 阅读 · 0 评论 -
LightOJ - 1062 Crossed Ladders(计算几何 + 二分)
链接 Crossed Ladders题意给出两个????,在一个房子底部放梯子搭到另一个????上,如图给出梯子长度 x,yx, yx,y 和它们的交点高度 ccc , 求出两个????之间的街道宽度;思路首先很容易想到利用三角形相似;三角形相似得出两个式子w−aw=cx2−w2\frac{w -a}{w} = \frac{c}{\sqrt{x^2-w^2}}ww−a=x2−w2caw=cy2−w2\frac{a}{w} = \frac{c}{\sqrt{y^2-w^2}}wa=y原创 2021-08-14 00:44:12 · 170 阅读 · 0 评论 -
AtCoder Beginner Contest 207 D - Congruence Points(计算几何)
链接 D - Congruence Points题意给出两个平面,每个平面上都有 nnn 个点,第一个平面上的点能否经过若干次整体平移或整体旋转后和第二个平面的点重合;思路首先求出由 nnn个点构成图形的重心,然后把两个平面中的重心都移到原点,这样就可以忽略平移的影响,只考虑旋转;在求重心时,我们可以把每个点都× nnn,减少精度误差;然后从 nnn 个点中选取一个不是原点的点,和另一个平面中的点匹配去求角度,然后遍历第一个平面的所有点,看是否在第二平面有点与它重合即可;AC代码#inclu原创 2021-08-13 18:40:30 · 189 阅读 · 0 评论 -
Codeforces Round #618 (Div. 2) D. Aerodynamic(计算几何 + 思维)
链接 D. Aerodynamic题意给一个严格的凸包,然后让它的边始终在原点上,运动产生一个轮廓,问这个轮廓是否和原来的凸包相似。思路手画一下样例,自己再画几个图形,会发现只有中心对称图形是符合题意的;然后求出中心点,对于凸包的每一个顶点,去求对称的点是否存在即可;AC代码#include <bits/stdc++.h>#define mes memset#define mec memcpy#define x first#define y second#define原创 2021-08-13 16:41:56 · 65 阅读 · 0 评论 -
POJ - 1775 Triathlon(半平面交 + 线性规划)
链接 Triathlon题意有 nnn 个选手参加三个比赛,给出每个选手三个比赛的速度,裁判可以任意调整每个比赛的路程,问能不能让选手 iii 胜出,可以则输出 YesYesYes;思路设每段路程为 x,y,zx,y,zx,y,z ,那么每个选手比赛花费的时间 T=xui+yvi+zwiT = \frac{x}{u_i} + \frac{y}{v_i} +\frac{z}{w_i}T=uix+viy+wiz那么如果要想然 iii 选手胜出,则Ti−Tj=xui+yvi+zwi−(xu原创 2021-08-11 08:31:45 · 181 阅读 · 0 评论 -
POJ - 3384 Feng Shui(半平面交)
链接 Feng Shui题意将两个半径为 rrr 的圆放入一个多边形中,两个圆占据最大面积时圆心坐标是多少;思路在多边形中放圆,最大圆的圆心一定在多边形内核中;将多边形的每条边都内推 rrr,然后半平面交算内推后的多边形内核,选取内核上相距最远的点即可;AC代码#include <iostream>#include <cmath>#include <algorithm>#include <cstring>#include <map&原创 2021-08-11 02:35:16 · 122 阅读 · 0 评论 -
POJ - 3525 Most Distant Point from the Sea (二分 + 半平面交)
链接 Most Distant Point from the Sea题意求多边形内任意一点到边的最小距离的最大值;思路求最小距离的最大值,很容易想到二分答案;二分每条边可以像内推进的距离,然后半平面交判断即可;每条边向内推进,我们可以预处理出每条边向内的单位向量,这样二分时好求一些;AC代码#include <iostream>#include <cmath>#include <algorithm>#include <cstring>#原创 2021-08-11 01:20:10 · 112 阅读 · 0 评论 -
POJ - 3335 Rotating Scoreboard(半平面交判断多边形内核)
链接 Rotating Scoreboard题意顺时针给出一些点,判断这些点构成的多边形是否存在内核;思路多边形内核:它是平面简单多边形的核是该多边形内部的一个点集,该点集中任意一点与多边形边界上一点的连线都处于这个多边形内部。 就是一个在一个房子里面放一个摄像 头,能将所有的地方监视到的放摄像头的地点的集合即为多边形的核。利用半平面交,最后判断队列里的点是否 >2>2>2 即可;AC代码#include <iostream>#include <cmat原创 2021-08-09 16:17:16 · 79 阅读 · 0 评论 -
POJ - 1584 A Round Peg in a Ground Hole(凸包判定 + 圆与多边形关系)
链接 A Round Peg in a Ground Hole题意给出一些点,问可不可以构成凸包,给出一个圆的半径和圆心坐标,问圆是否在凸包内;思路首先判断是否是凸包判断圆心是否在凸包内判断圆和凸包的关系,用点到直线距离和半径比较AC代码#include <iostream>#include <cmath>#include <algorithm>#include <cstring>#include <map>#incl原创 2021-08-07 22:00:41 · 108 阅读 · 0 评论 -
POJ - 1039 Pipe(计算几何)
链接 Pipe题意给出一个管道,问一道光能照射的最远距离的x坐标是多少;思路要想让光照射的更远,那么这束光一定经过一个上端点,一个下端点, 然后我们只需要去枚举上下端点即可;对于上下端点构成的直线,对于每一个弯道都去判断上顶点和下顶点,(用叉积);然后用点向式方程求最大的x即可;AC代码#include <iostream>#include <cmath>#include <algorithm>#include <cstring>#in原创 2021-08-06 01:52:21 · 93 阅读 · 0 评论 -
POJ - 2826 An Easy Problem?!(计算几何 + 思维)
链接 An Easy Problem?!题意两个木板,问能接多少雨水;思路考虑多种情况:不相交一个木板与x轴平行长木板挡住接水第三种情况大概是这样的情况都考虑周全即可;AC代码#include <iostream>#include <cmath>#include <algorithm>#include <cstring>#include <map>#include <vector>using n原创 2021-08-05 21:31:10 · 104 阅读 · 0 评论 -
POJ - 1696 Space Ant(极角排序 + 凸包变种)
链接 Space Ant题意有一个太空????,行走有三个限制:不能右转;走路时留下一条红色的小路;讨厌以前红色的路径,并永远不会经过红色的路径;在一个坐标系上有许多????,所有????的坐标都不相同,这个????每天必须吃一个????才能活下去,请找到一个路径,保证????活得时间最长;????从(0,min(y))(0,min(y))(0,min(y))开始;思路每一次走极角最小的即可;极角排序方法1:PDD operator-(PDD a, PDD b) { retur原创 2021-08-04 00:57:54 · 157 阅读 · 0 评论 -
POJ - 1556 The Doors(计算几何 + 最短路)
链接 The Doors题意从 (0,5)(0,5)(0,5) 位置走到 (10,5)(10,5)(10,5),有 nnn 个垂直于 xxx 轴的墙壁,每个墙壁都会有两个门洞。下面的图片显示出了一个墙体及最短路径。思路首先我们把每两个点连一条边,判断边是否和墙体相交,如果不相交就连边,相交就不连;最后跑一遍 dijkstradijkstradijkstra 最短路就可以;AC代码#include <iostream>#include <vector>#includ原创 2021-08-02 22:45:59 · 144 阅读 · 0 评论 -
Codeforces Round #736 (Div. 2) F1. Gregor and the Odd Cows (Easy)(皮克定理)
链接 F1. Gregor and the Odd Cows (Easy)题意简单版本的题中的坐标都是偶数给出 nnn 个坐标点,其他坐标点都是????,三个坐标点是肯定可以构成一个三角形的,问构成的三角形里有奇数个????;思路首先很容易想到皮克定理,2S=2a+b−22S = 2a + b - 22S=2a+b−2,其中 SSS 是三角形坐标,aaa 是三角形内部的点,bbb 为三角形的边上的格点数;把式子转化一下 2S=b+2(a−1)2S = b + 2(a - 1)2S=b+2(a−1原创 2021-08-02 18:59:03 · 192 阅读 · 0 评论 -
POJ - 1269 Intersecting Lines(计算几何 + 叉积 + 跨立实验)
链接 Intersecting Lines题意给出两条线段,判断是否共线,平行,或者相交,如果相交输出交点;思路如何判断共线:我们知道两个向量叉积为 000,两向量共线;所以我们只需要判断 a⃗×d⃗=0\vec{a} \times\vec{d} = 0a×d=0 和 a⃗×b⃗=0\vec{a}\times\vec{b} = 0a×b=0 即可;如何判断平行:写出两点式直线方程,判断斜率即可;如何判断相交:这个题其实不用考虑相交条件,当上面两个条件都不符合的时候就相交了,但是还是想说原创 2021-08-01 00:28:16 · 210 阅读 · 0 评论 -
2021牛客暑期多校训练营2 Girlfriend(阿波罗尼斯圆 + 计算几何)
题意空间里有6个点,满足∣P1A∣⩾k1∣P1B∣\left | P_1A \right | \geqslant k_1\left | P_1B \right |∣P1A∣⩾k1∣P1B∣,∣P2C∣⩾k2∣P2D∣\left | P_2C \right | \geqslant k_2\left | P_2D \right |∣P2C∣⩾k2∣P2D∣,求P1,P2各自的轨迹相交部分的体积;思路对于固定的k,P1,P2的轨迹构成标准的阿波罗尼斯球壳;同时,题意的k >= 1,可以得原创 2021-07-21 13:50:42 · 270 阅读 · 1 评论