![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
二维点线面
二分抄代码
去了18ec没资格去19ec的反向训练选手
展开
-
2019ICPC沈阳现场赛 E Capture Stars 圆的反演
https://ac.nowcoder.com/acm/contest/7830/D感觉沈阳的惨败都是上个世纪的事情了。。。刚好牛客国庆集训3把沈阳的题放出来了,拿出来补补,就是个圆的反演水题,当时很多队很早就过了,然而最后也就那么多人过,因为2018-2019年的各种比赛题目中没出现过这题就拿(0,0),半径为2*R当反演圆,然后两个过切点的圆反演过去就是两条直线,吧所有点反演过去就是直线之间的点,因为望远镜的区域跟原来的大圆小圆相切并夹在中间,反演过去就也是夹在中间相切的,半径就知道了,横坐标也原创 2020-10-11 01:28:58 · 271 阅读 · 0 评论 -
2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 G Finding the Radius for an Inserted Circle
https://nanti.jisuanke.com/t/A1283怎么圆的反演全是2017出的题以上面两个圆的切点为反演点,反演半径为R,那么左右两个圆就变成了lx=-R/2和rx=R/2的两条垂直的直线然后与这左右两个圆相切的就是夹在两条直线之间的,又因为与下面的圆也相切,所以所有圆的半径都是R/2,纵坐标减一减就行#include<bits/stdc++.h>using namespace std;const double eps=1e-7;inline int原创 2020-05-13 15:39:40 · 240 阅读 · 0 评论 -
hdu6158 The Designer
http://acm.hdu.edu.cn/showproblem.php?pid=6158三角函数尤其是反三角函数又慢精度又差,能用比例向量和叉积甚至x/sqrt(sqr(x)+sqr(y))这种形式都比反三角函数好这题以两个圆的左边切点为反演中心,大圆的直径为R,大圆的反演结果就是与大圆相切的一条直线,小圆就是更远处的直线,由于反演后的相切性不变,所以3个原反演出2条直线夹着一串圆,而且这些圆也要相切,他们的直径是rx-lx#include<bits/stdc++.h>usi原创 2020-05-13 02:23:21 · 182 阅读 · 0 评论 -
hdu6097 Mindis
http://acm.hdu.edu.cn/showproblem.php?pid=6097我发现仅仅看着那些圆的反演的性质,然而还是不会做题。。。。我们把p点对圆c进行反演得到p2,对q进行反演得到q2,由于三角形ODP~三角形OP2D,因为|OD|*|OD|=r^2=|OP|*|OP2|,所以相似,那么|PD|/|DP2|=|OD|/|OP2|这样P2D+Q2D最小就等价于PD+QD最小那么P2Q2如果与圆有交点,那么两点之间线段最短,D就是与圆的交点否则,则是道P2Q2的中垂线原创 2020-05-12 16:44:55 · 176 阅读 · 0 评论 -
hdu4773 Problem of Apollonius
http://acm.hdu.edu.cn/showproblem.php?pid=47732017ccpc网络赛的时候,我跟szh因为精度不够没过的那道几何题,后来听GB说是要圆的反演,可以提高精度,甚至可以把圆变成线来做。然而我19年学几何的时候忘记了这个知识点,结果19沈阳就出现了,拿坐标公式在那里硬搞。。今天终于想起来了,代码和思路均来自https://www.cnblogs.com/NineSwords/p/9225187.html写的非常好,我突然发现我甚至没写过两个圆的公切线怎么求原创 2020-05-12 01:44:56 · 196 阅读 · 0 评论 -
poj 2826
写了一句if(area<0) area=-area;并没毛用,WA一万年,照着discuss里面的说法试了一下printf(area+eps)就过了。。。行行,以后计算几何题一律+eps输出,卧佛了这题讨论还是很多了。首先,我们要找出不会积水的情况1.没有交点2.两线段平行或重合3.有一条线段垂直于地面和天4.一根线段遮挡住了第二根线段,也就是遮挡住了朝天的开口。...原创 2019-03-12 20:05:49 · 192 阅读 · 0 评论 -
poj2986 圆与三角形相交面积
同poj3675,而且我自己写的线段与圆求交点还是过不了。。。。#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<vector>#define maxl 510#define eps 1e-10const double...原创 2019-02-20 21:01:25 · 806 阅读 · 0 评论 -
poj3675 求圆与多边形相交的面积
每条线段与原点连起来求在圆内的有向面积,然后输出之前绝对值一下。求三角形在圆内的面积,都在圆内,直接三角形面积,都在圆外且无交点,直接扇形面积,如果一点在圆内一点在圆外的话,求一个扇形一个三角形,两点在圆外但有2个交点,则求2个扇形中间一个三角形的面积。使用点积解方程求线段与圆的交点过不了这题,不知道为何,但用上交小红书的解方程模板就可以#include<cstdio>...原创 2019-02-20 20:39:19 · 215 阅读 · 0 评论 -
zoj1450 最小圆覆盖
随机增量法,期望O(n),小红书模板#include<cstdio>#include<cstring>#include<cmath>#include<ctime>#include<algorithm>#define maxl 110#define eps 1e-8using namespace std;inline...原创 2019-02-18 22:30:16 · 140 阅读 · 0 评论 -
poj1265 求多边形内部的点和边界上的点
pick公式:给定顶点坐标均是整点的简单多边形,面积=内部点+边上点/2+1对于一个多边形,由于要左闭右开的线段避免重复计算边上点每条边上的个点数为gcd(x2-x1,y2-y1)#include<cstdio>#include<cmath>#define maxl 100010#define eps 1e-8inline int sgn(doubl...原创 2019-02-12 22:08:33 · 997 阅读 · 0 评论 -
bzoj1007 类半平面交
之前直接套半平面交的板子怎么都过不了后来看博客说这题精度要求太高要去掉eps什么的。。。但我还是WA后来随便写一发,直接用A排序就过了之后纠结半平面交的板子为撒错了首先吧hpicmp的排序改成用A排序,而不是tan2计算出来的k后来发现不能把上口封住,会出问题。而由于没有封口,导致下面的判断首尾合不合法也要去掉这样才能过。。。计算几何急死人系列,上面是随手写的代码,下面...原创 2019-03-22 19:14:00 · 201 阅读 · 0 评论 -
bzoj1038
想法很简单在每一条线段上三分横坐标然后一定是对于左右的底层端点连到这个横坐标,然后求出高度可以想到这个三分肯定是对的,因为在一条线段上,一定是个凸函数但是精度被卡成傻子在洛谷上eps开1e-9,80分,开1e-10,90分。。。然后不用struct point 的向量写法,直接坐标运算就过了。太毒瘤了。#include<bits/stdc++.h>#...原创 2019-04-10 15:34:12 · 122 阅读 · 0 评论 -
gym 101158J 2016-2017 ACM-ICPC, Asia Tsukuba Regional Contest
比赛的时候spj冇得,以为随便交一发过了爆炸高兴,第一次比赛中写200行的计算几何就1A了,然后rejudge就没了。后来发现确实不能取最小圆覆盖的圆心,而由于这是个凸包,圆心肯定在凸包内时面积才能取到最大值,所以可以再凸包内三分套三分找圆心,可以感受到三分x后三分y一个向上凸的函数,是可以取到极值的。然后套多边形和圆求相交面积的模板就行了。#include<bits/stdc...原创 2019-04-01 22:05:42 · 255 阅读 · 0 评论 -
HYSBZ 1069 最大土地面积
之前没看到n=2000,计算几何自动脑补复杂度必须O(N) O (nlogn)....然后 打开题解发现可以n^2....那就简单了,枚举对角线,然后左边找个面积最大的三角形,右边再找一个。two points 扫过去,那么复杂度还是O(n^2)的。过样例就A了好爽啊。#include<bits/stdc++.h>#define maxl 2010 #defi...原创 2019-04-08 23:39:31 · 94 阅读 · 0 评论 -
bzoj 2618 半平面交
觉得巨恶心不知道怎么办,结果一看题解发现因为凸多边形相交还是一个多边形,并不会变成多个奇怪的很多个小图形,所以可以直接半平面交求面积,测板子+1,过样例就A真爽。#include<bits/stdc++.h>#define maxl 1010#define eps 1e-8using namespace std;inline int sgn(double x){ i...原创 2019-04-16 21:05:38 · 140 阅读 · 0 评论 -
HDU6590 2019杭电多校第一场1013 code
考场上想到是把二维平面的点用一条线分成两个集合,但是没想到用凸包去判断是否相交跟队友讲了题以后,队友提到了凸包但我没反应过来看了榜以后以为2题已经结束了,后2个小时都在跟隔壁队伍的同学吹水啊。。。。这道水题就没去开了。。。走在路上和队友又聊起这题,突然发现凸包相交就行了。。。然后回机房写了30分钟就过了。。。卧槽,好亏啊,以后比赛一定要每道题都认真思考一下,尽管是过得不多的题,几十...原创 2019-07-22 21:17:25 · 256 阅读 · 0 评论 -
hdu6631 2019杭电多校第五场
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6631本来写得很复杂不知道怎么判下去了之后看了dls的录播发现只需要枚举对称轴在a[i-1],a[i+1]线段的中垂线上或者在a[i],a[i+1]边的中垂线上就行了然后判断剩下的点对的中点是否与在对称轴上且垂直就就行了。一开始T=40的数据错了3个看到某博客里的一种恶心情况:http...原创 2019-08-06 21:33:27 · 289 阅读 · 0 评论 -
poj1385 求多边形重心
把多边形分割成三角形,对每个三角形求重心,再根据三角形的有向面积为权值求加权平均#include<cstdio>#include<cmath>#define maxl 100010#define eps 1e-8inline int sgn(double x){ if(x>-eps && x<eps) return 0; i...原创 2019-02-12 21:24:53 · 205 阅读 · 0 评论 -
zoj1081 判断点是否在多边形内,在边上也是在内
#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define maxl 110#define eps 1e-8using namespace std;inline int sgn(double x){ if(x>-eps &&...原创 2019-02-12 20:16:37 · 157 阅读 · 0 评论 -
poj1039 忽略线段的端点,求线段交点
可以想到一定是2个端点连成的线可以达到最远x距离,枚举两个端点就是了,不能跟端点前面的线相交,也不能通过端点超出管道的范围。最烦的是平时交到端点都算交,现在不算了,各种要改,而在端点处被挡住了又要算出这个端点。所以判断很麻烦我感觉和别人的写的一个道理,discuss里各种数据都能过,然而就是WA,我是真的佛了换成别人代码就过了这是为什么啊#include<cstdio>...原创 2019-02-12 16:38:36 · 252 阅读 · 0 评论 -
POJ2398 判断点在线左边
跟POJ2318差不多,不过这次要对线进行排序,对线的排序有涉及到对点的排序#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define maxl 100010#define eps 1e-8using namespace std;int ...原创 2019-01-19 21:13:56 · 168 阅读 · 0 评论 -
POJ3304 求直线和线段是否相交
判断能否找到一条直线使得与每个线段有交点先枚举2条线段,再枚举出2条线段上的各一个端点,来当做直线。判断直线相交直接利用向量线段表示法,然后用叉积去算a是直线的一个点,v是方向向量,b是线段的一个点,w是方向向量假设a+tv是交点cj(a + tv − b,w) = 0cj(a − b,w) + cj(tv,w) = 0t ∗ cj(v,w) = cj(b − a,w)...原创 2019-01-19 22:36:33 · 302 阅读 · 0 评论 -
POJ2653 用叉积判断线段相交
2019.2.12更新,以前第二条判断完全是错的。。。怎么就过了。。。第一步:先判断一条线段所在直线与另外一条线段相交第二步:再判断另外一条线段所在直线与此线段相交一下代码只能说明有重合部分,并未求出线段交点#include<cstdio>#include<cstring>#include<cmath>#define maxl 10001...原创 2019-01-20 16:09:12 · 174 阅读 · 0 评论 -
codeforces613A 点到线段的距离
在网上找到了一个板子,直接运用了点积知道某两条向量的方向呈钝角,就可以得出是某个端点最近,否则就是直接运用叉积的方法,求垂线的高度。其实还可以直接求垂足,然后坐标距离运算#include<bits/stdc++.h>#define maxl 100010using namespace std;const double PI=acos(-1.0);struct p...原创 2019-01-21 16:14:08 · 170 阅读 · 0 评论 -
codeforces 8D 二分后判断3个圆是否有交集
这题一开始看错题了,原来最多的走的距离是它本身走的最短距离+t,之前以为是比两个路长中较小的那个不超过多少。。。就变成了未知数。设最长路长分别为l1,l2那么如果alan和bob能一直一起走,那么就是最长一起走的路径min(l1,l2)否则就是一起走到P点,假设cinema到P为x,那么x+dis(P,shop)+dis(shop,house)<=l1; x+dis(P,house...原创 2019-01-22 09:18:11 · 840 阅读 · 0 评论 -
POJ1228 稳定凸包
看题半天没看懂意思,以为就是判断是否有凸包结果。。。。看了题解才知道,是要确定一个凸包是否唯一,即不能通过新增点变成新的凸包,也就是凸包的每条边上至少有3个点。#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<cmath>...原创 2019-02-14 15:57:45 · 148 阅读 · 0 评论 -
POJ2187 求平面上最远点对
最远点对一定是凸包上的点对,而对于随机数据,凸包上的点会比所有点少很多,所以虽然n=50000,但是求出凸包以后直接枚举也是可过的另外一种方法就是用旋转卡壳来求凸包直径#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<ve...原创 2019-02-14 21:30:36 · 214 阅读 · 0 评论 -
Gym 101606B 类旋转卡壳
https://cn.vjudge.net/problem/Gym-101606B要把一块多边形饼干放进一个口子里,问口子直径最小是多少其实就把多边形求个凸包,然后对于凸包上每一条边,找一个离这条边最远的点的距离,然后这个距离的最小值就是答案只要把旋转卡壳改一下就行了#include<cstdio>#include<cstring>#include&l...原创 2019-02-14 22:13:40 · 183 阅读 · 0 评论 -
poj1279 不规则多边形的核,用半平面切割多边形 O(n^2)
//const double inf=1e9;//求半平面切割多边形的时候,要先放入4个极限点当整个平面,再求面积,但是由于double只能存1e300+的数,而如果inf=1e15-18就很容易在中间有乘法的计算过程爆炸损失精度,所以inf要根据题意来设置#include<cstdio>#include<cstring>#include<algorith...原创 2019-02-15 17:14:24 · 214 阅读 · 1 评论 -
zoj2107 平面最近点对
先按照x排序,然后分治,先求出左边一半的最小值,再求出右边一半的最小值。最后只要考虑跨过中间mid 的 点对是否为最小距离就行了假设当前最短距离时ans,我们找到x坐标在(a[mid].x-ans,a[mid].x+ans)之间的点,然后对他们按照y坐标排序,对于每一个点,只要找离它y坐标最近的5个点更新最短距离就行了,可以画图理解为啥是5个但是书上写的是6个,也有博客说7个。。。...原创 2019-02-21 16:47:38 · 165 阅读 · 0 评论 -
poj2451 半平面交 nlogn
注意一开始要0 0 10000 0 10000 10000 0 10000 的边界#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<queue>#include<dequ...原创 2019-02-15 21:56:05 · 266 阅读 · 0 评论 -
poj1474 半平面交判断是否解包括点线解
白书板子考虑不周,上交小红书板子也不好,kuangbin的板子上的from UESTC的板子也有问题,网上那个题解抄kuangbin 的板子竟然也能A。最后我修正成了一个自己的板子#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<...原创 2019-02-16 22:10:15 · 211 阅读 · 0 评论 -
poj2451 求半平面交的面积
测测自己改的新板子,挺对的#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<queue>#include<deque>#define maxl 20010#de原创 2019-02-16 22:11:19 · 164 阅读 · 0 评论 -
poj3335 判断半平面交是否有解集
跟poj1474一个意思#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<queue>#include<deque>#define maxl 20010#def原创 2019-02-16 22:12:07 · 277 阅读 · 0 评论 -
poj3130 半平面交
同3335#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<queue>#include<deque>#define maxl 20010#define eps原创 2019-02-17 13:26:17 · 183 阅读 · 0 评论 -
poj1912 求直线与凸包是否相交 logn
我真的佛了,竟然还有0<=n<=1e5的情况,导致我一直RE,因为处理斜率的时候要特殊处理w[n-1],所以n=0时,w[n-1]会数组越界导致RE。。。。计算几何竟然还有给0个点的情况,真是有毒,dicuss里只有人提醒n=1的情况。。。。这里需要改变一下凸包的点的先后顺序,优先y坐标小的在前,这样就可以根据atan2的值二分了,由于是逆时针的凸包,第一个点一定是y坐标最小的中间...原创 2019-02-17 22:30:46 · 420 阅读 · 0 评论 -
POJ2318 二分,判断点在哪条线的左边
判断一个点p在上面是s下面是e的线段左边,右手定则知道叉积小于0,即(s-p) ^ (e-p) <0二分判断在哪条线左边就行了#include<cstdio>#include<cstring>#include<cmath>#define maxl 100010#define eps 1e-8using namespace std;...原创 2019-01-19 20:28:47 · 178 阅读 · 0 评论