--------计算几何--------
文章平均质量分 63
Neo__Z
这个作者很懒,什么都没留下…
展开
-
bzoj5077: [Ctsc2016]时空旅行【线段树+凸包】
Description2045年,人类的技术突飞猛进,已经找到了进行时空旅行的方法。小R得到了一台时空旅行仪,他想用它调查不同 时空中人类的发展状况。根据平行时空理论,宇宙中存在着很多独立的时空,每个时空在下一个时间点还会分化出 若干个不同的时空。宇宙是一个三维空间,人类使用空间直角坐标系来描述空间中的一个位置,三维坐标分别是 x ,y,z。我们假设在初始的时空(编号为 0)中,人类存在...原创 2018-05-22 17:04:55 · 542 阅读 · 0 评论 -
bzoj2402: 陶陶的难题II【分数规划+树链剖分+线段树维护凸包】
DescriptionInput第一行包含一个正整数N,表示树中结点的个数。 第二行包含N个正实数,第i个数表示xi。 第三行包含N个正实数,第i个数表示yi 。 第四行包含N个正实数,第i个数表示pi。 第五行包含N个正实数,第i个数表示qi。 下面有N-1行,每行包含两个正整数a,b(1<=a,b<=N),表示树中的边。 第N+5行包含一个正整数M,表示...原创 2018-02-24 18:10:00 · 273 阅读 · 0 评论 -
bzoj1137: [POI2009]Wsp 岛屿【半平面交】
DescriptionByteotia岛屿是一个凸多边形。城市全都在海岸上。按顺时针编号1到n。任意两个城市之间都有一条笔直的道路相连。道路相交处可以自由穿行。有一些道路被游击队控制了,不能走,但是可以经过这条道路与未被控制的道路的交点。问从城市1到n的最短距离。Input第一行正整数n m表示城市数和被控制的岛屿数(3≤n≤10^5 1≤m≤10^6)接下来n行每行两个整数x y...原创 2018-02-24 17:58:18 · 317 阅读 · 0 评论 -
SGU278 Fuel【凸包】
题目大意:有n种燃料,每种有三个属性:ai,bi,ciai,bi,cia_i,b_i,c_i; 给定A,BA,BA,B,要求∑aimi≤A,∑bimi≤B∑aimi≤A,∑bimi≤B\sum a_im_i\le A,\sum b_im_i\le B,使得∑cimi∑cimi\sum c_im_i最大,mimim_i可以为实数。解题思路:先将四个变量转为三个: 令xi=cimi,a...原创 2018-02-21 18:44:03 · 576 阅读 · 0 评论 -
bzoj2300: [HAOI2011]防线修建【动态凸包】
解题思路:把询问离线倒序处理,维护只加点的动态凸包即可。#include<bits/stdc++.h>#define ll long longusing namespace std;int getint(){ int i=0,f=1;char c; for(c=getchar();(c!='-')&&(c<'0'||c>...原创 2018-02-21 11:13:27 · 241 阅读 · 0 评论 -
codevs1273 风战 【三角剖分+凸包+动态规划】
题目大意:原题翻译细节有误,加上我自己看丢条件,导致我想了半天没想通。 题意是有n个白点,m个黑点,还有原点(0,0)无色,黑白点的纵坐标均大于0,且无三点共线,要求一个必须包含原点的凸包,使得凸包中白点的数量减黑点的最多。n+m小等于100。解题思路:如果没有“纵坐标均大于0”,“无三点共线“,“必须包含原点”三个条件,题目将变得很恶心,然而原题没翻译第三个条件,我看丢了前两个...原创 2018-02-20 08:33:48 · 435 阅读 · 1 评论 -
bzoj2732: [HNOI2012]射箭【二分答案+半平面交】
Description沫沫最近在玩一个二维的射箭游戏,如下图 1 所示,这个游戏中的 x 轴在地面,第一象限中有一些竖直线段作为靶子,任意两个靶子都没有公共部分,也不会接触坐标轴。沫沫控制一个位于(0,0)的弓箭手,可以朝 0 至 90?中的任意角度(不包括 0度和 90度),以任意大小的力量射出带有穿透能力的光之箭。由于游戏中没有空气阻力,并且光之箭没有箭身,箭的轨迹会是一条标准的抛物线,被...原创 2018-02-18 09:32:22 · 265 阅读 · 0 评论 -
poj1474 Video Surveillance【半平面交】
解题思路:求多边形的内核,半平面交模板。 维护时不仅要看队尾直线是否合法,还要看队首的直线是否合法。#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<cmath>...原创 2018-01-13 18:02:43 · 269 阅读 · 0 评论 -
bzoj3190: [JLOI2013]赛车【半平面交】
Description这里有一辆赛车比赛正在进行,赛场上一共有N辆车,分别称为个g1,g2……gn。赛道是一条无限长的直线。最初,gi位于距离起跑线前进ki的位置。比赛开始后,车辆gi将会以vi单位每秒的恒定速度行驶。在这个比赛过程中,如果一辆赛车曾经处于领跑位置的话(即没有其他的赛车跑在他的前面),这辆赛车最后就可以得奖,而且比赛过程中不用担心相撞的问题。现在给出所有赛车的起始位置和速度,你...原创 2018-02-15 09:53:54 · 245 阅读 · 0 评论 -
bzoj4548: 小奇的糖果【链表+扫描线+树状数组】
Description有 N 个彩色糖果在平面上。小奇想在平面上取一条水平的线段,并拾起它上方或下方的所有糖果。求出最多能够拾起多少糖果,使得获得的糖果并不包含所有的颜色。Input包含多组测试数据,第一行输入一个正整数 T 表示测试数据组数。 接下来 T 组测试数据,对于每组测试数据,第一行输入两个正整数 N、K,分别表示点数和颜色数。 接下来 N 行,每行描述一个点,前两个...原创 2018-02-24 18:26:33 · 233 阅读 · 0 评论 -
poj1259 The picnic【最大空凸包详解 计算几何+动态规划】
题目大意:给定平面上nnn个点,求面积最大的空凸包。1≤n≤1001≤n≤1001\le n\le 100解题思路:感谢http://blog.csdn.net/nyroro/article/details/45268767这篇博客的讲解。算法一先枚举每个点作为凸包的最下面的点O,不考虑它下方的点,其余点以O为原点极角排序。再枚举凸包最后一个点iii与O相连,设dp[i...原创 2018-02-25 09:12:02 · 920 阅读 · 0 评论 -
CodeForces 682E Alyona and Triangles【最大三角形 旋转卡壳or迭代】
题目大意:给出n个点,任意三个点组成的三角形面积不超过S,S大于n个点可以组成三角形的最大面积; 构造一个大三角形覆盖上述所有n个点,并且面积不超过4S;解题思路:不得不说思路很巧妙,不过题目中的S取值也相当于给了个暗示。结论:先求出最大三角形ABCABCABC,再以abc分别作为三边中点所得三角形A′B′C′A′B′C′A'B'C'即是所求三角形。如图: 证明:...原创 2018-02-25 14:44:19 · 442 阅读 · 0 评论 -
bzoj5328: [Sdoi2018]物理实验【坐标旋转+扫描线+set】
Description小T这学期有物理实验课,为了顺利完成下一节课的实验,他打算在课前对实验内容进行预习。这次实验在一个二 维平面上进行,平面上放置了一条无限长的直线导轨,导轨上放置了一个长为L的激光发射器,激光发射器会向导 轨两侧沿导轨垂直方向同时发射宽度为L的平行激光束。平面上还放置了n个挡板,每个挡板可以看作是一条线段, 现在每个挡板都不和直线导轨接触,且和直线导轨的夹角不超过85...原创 2018-05-25 18:17:25 · 547 阅读 · 0 评论 -
bzoj5316: [Jsoi2018]绝地反击【计算几何+二分+扫描线+网络流】
传送门解题思路:先二分答案,那么每个点就有了一个匹配范围。 考虑轨道上匹配点的偏转角度,肯定是一个匹配点抵住一个点的匹配边界上,所以一共只有2n种匹配方式,每次暴力网络流是O(n4logn)O(n4logn)O(n^4logn)注意到偏转角度不会超过2π/n2π/n2\pi/n,即最多只会一项每个点一条匹配边的出现,另一条的消失,所以我们可以用扫描线的方法,将操作排序后处理增广和退流...原创 2018-05-15 07:55:44 · 1100 阅读 · 0 评论 -
bzoj5317: [Jsoi2018]部落战争【凸包/Minkowski sum】
传送门解题思路:先求凸包。 合法向量相当于凸包A中存在一点经过该向量可到凸包B中。 即 A+v⃗ =BA+v→=BA+\vec v=B ,那么v⃗ =A−Bv→=A−B\vec v=A-B 画图发现,这些向量的轮廓就是凸包A绕取反后凸包B坐标平移一圈。 好像这个东西也叫Minkowski sum,即求{v⃗ =a⃗ +b⃗ ,a⃗&...原创 2018-05-21 14:53:12 · 1583 阅读 · 0 评论 -
BJ模拟 Rectangle Query【分块+bitset】
题目描述:平面上有 nnn 个点,你需要回答qqq个询问: 给定 x1,x2,y1,y2x1,x2,y1,y2 x_1,x_2,y_1,y_2 ,在满足 x1≤x≤x2x1≤x≤x2x_1≤x≤x_2 且 y1≤y≤y2y1≤y≤y2 y_1≤y≤y_2 的所有点 (x,y)(x,y) (x,y) 中,有多少个不同的横坐标(x坐标)和不同的纵坐标(y坐标)? 强制在线,n,q≤5000...原创 2018-05-03 18:48:19 · 190 阅读 · 0 评论 -
BJ模拟 帐篷【凸包】
题目描述: n,m<=400解题思路:当n,m很小时,直接暴力枚举起点,用三角剖分的方式,状态记录当前点和上一个点dp,复杂度为O(n4)O(n4)O(n^4) 当n,m较大时,h已经远超1e9z,直接求周长最小凸包即可,注意周长最小时自动满足凸性,所以可以只枚举起点,状态记录当前点dp即可,也可以用floyed求最小环的方式dp,时间复杂度皆为O(n3)O(n3)O(n^3...原创 2018-05-01 11:11:00 · 180 阅读 · 0 评论 -
bzoj4570: [Scoi2016]妖怪【凸包+对勾函数最小值】
Description邱老师是妖怪爱好者,他有n只妖怪,每只妖怪有攻击力atk和防御力dnf两种属性。邱老师立志成为妖怪大师,于 是他从真新镇出发,踏上未知的旅途,见识不同的风景。环境对妖怪的战斗力有很大影响,在某种环境中,妖怪可 以降低自己k×a点攻击力,提升k×b点防御力或者,提升自己k×a点攻击力,降低k×b点防御力,a,b属于正实数 ,k为任意实数,但是atk和dnf必须始终非负...原创 2018-03-26 21:04:46 · 351 阅读 · 0 评论 -
bzoj4445: [Scoi2015]小凸想跑步【半平面交】
Description小凸晚上喜欢到操场跑步,今天他跑完两圈之后,他玩起了这样一个游戏。 操场是个凸n边形,N个顶点按照逆时针从0~n-l编号。现在小凸随机站在操场中的某个位置,标记为 P点。将P点与n个顶点各连一条边,形成N个三角形。如果这时P点,0号点,1号点形成的三角形的面 积是N个三角形中最小的一个,小凸则认为这是一次正确站位。 现在小凸想知道他一次站位正确的概率是多少。...原创 2018-03-22 16:05:33 · 404 阅读 · 0 评论 -
bzoj4009: [HNOI2015]接水果【整体二分+扫描线】
Description风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果。由于她已经DT FC 了The big black, 她觉得这个游戏太简单了,于是发明了一个更加难的版本。首先有一个地图,是一棵由 n 个顶点、n-1 条边组成的树(例如图 1给出的树包含 8 个顶点、7 条边)。这颗树上有 P 个盘子,每个盘子实际上是一条路径(例如图 1 中顶点 6 到顶点 ...原创 2018-03-12 19:16:34 · 326 阅读 · 0 评论 -
bzoj2388: 旅行规划【分块+凸包】
DescriptionOIVillage是一个风景秀美的乡村,为了更好的利用当地的旅游资源,吸引游客,推动经济发展,xkszltl决定修建了一条铁路将当地n个最著名的经典连接起来,让游客可以通过火车从铁路起点(1号景点)出发,依次游览每个景区。为了更好的评价这条铁路,xkszltl为每一个景区都哦赋予了一个美观度,而一条旅行路径的价值就是它所经过的景区的美观度之和。不过,随着天气与季节的变化,...原创 2018-03-06 21:40:42 · 319 阅读 · 0 评论 -
bzoj3165: [Heoi2013]Segment【线段树+计算几何】
Description要求在平面直角坐标系下维护两个操作: 1.在平面上加入一条线段。记第i条被插入的线段的标号为i。 2.给定一个数k,询问与直线 x = k相交的线段中,交点最靠上的线段的编号。 Input第一行一个整数n,表示共n 个操作。 接下来n行,每行第一个数为0或1。 若该数为 0,则后面跟着一个正整数 k,表示询问与直线 x = ((k +las...原创 2018-02-26 15:00:02 · 248 阅读 · 0 评论 -
SGU209 Areas 【平面图】
题目大意:给出n条直线,问直线围成的所有闭合区域的个数及面积,按升序输出。(n<=80)解题思路:①我们需要求出两两直线的交点; ②再对每条直线上的交点排序,来求出所有分割成的线段并连边(正反两条边); ③对于连向一个点的几条线段,对它们进行极角排序进行处理,这样就可以对于每条边记录走过去后下一条该走那条边了,我们脑补一下应该可以直到是它排序后相邻边的反向边。 ④找循环,利用叉积求面积。代原创 2017-12-25 16:58:12 · 543 阅读 · 0 评论 -
bzoj3707 圈地【计算几何】
解题思路:如果枚举了两个点a,b。如果以点a,b所在直线为y轴的话,可以看出面积最小的就是离这个坐标系y轴最近的一个点。如果我们能够快速的得知最近的点的话,就可以将复杂度降低到O(n2n^2)。把这些点两两之间求出一条直线,记录这条直线是哪两个点取到的,记录这条直线的斜率k。然后按照k排序,我们可以依次按照k递增连续变化的顺序处理这些直线。我们将点按x为第一关键字,y为第二关键字排序组成一个序列,可原创 2017-11-23 09:25:46 · 711 阅读 · 0 评论 -
poj2653 Pick-up sticks
题目大意:按顺序放上一些线段,为最后未被其他线段覆盖的线段有哪些?解题思路:数据很水,n2n^2也能过,主要考察线段相交的判断。 倒着加入,看每条线段有没有与先加入的相交,没有则不被覆盖。 若两条线段相交,则其两端点分别在另一条线段两侧,用叉乘判断即可。#include<iostream>#include<cstdio>#include<cstring>#include<string>#原创 2017-11-23 07:54:49 · 218 阅读 · 0 评论 -
poj2074 Line of Sight【计算几何】
题目大意:题意:给出一个房子(看成线段)的端点坐标,和一条观光区的两端坐标,给出一些障碍物(看成线段)的两端坐标(都平行于x轴)。问在路上能看到完整房子的最大连续长度是多长。 【注意】 1. 输入的线段(x1,x2,y)保证x1<<x2 2. 输入的home一定在观光区上面 3. 输入的障碍物不一定在home和观光区之间 4. 如果输入的障碍物与home同y轴,不管重合与部分重合还是不重合原创 2017-11-22 21:06:18 · 501 阅读 · 0 评论 -
poj2318 Toys 【计算几何】
题目大意:给出一个矩形抽屉,然后有n个板子放在其中,连接上下底。给出m个玩具的坐标(视作点), 问n+1个区间内,每个区间中有多少玩具。解题思路:直接二分+叉乘判断每个玩具在那个区间内即可。#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<algorith原创 2017-11-22 21:00:35 · 243 阅读 · 0 评论 -
bzoj1914 Triangle Counting 数三角形【极角排序】
解题思路:可以发现,对于一个不是黄金三角形的三角形,有且仅有两个顶点满足:另外两个顶点在其与原点连线同侧。所以我们可以用所有三角形个数(C3nC_n^3)减去不满足的个数得到答案。将所有点极角排序,枚举每个点,为了去重对于一个顶点只算在其与原点连线右侧的点数,那么不合法的三角形数就是C2nC_n^2,又注意到随着点的枚举,不合法的点也是随之单调旋转的,所以用两个指针即可。PS: 原来极角排序可以用原创 2017-11-30 20:00:13 · 314 阅读 · 0 评论 -
bzoj1249 动态凸包【凸包+set】
解题思路:由于我用的是极角排序维护凸包,找极点要找初始凸包内部的点,所以用了double,然后就被无情卡精了……。 不过算法还是正确的。首先找一个初始凸包内部的点作为极点,然后按极角放入set,注意旋转超过180度的情况要特判。每加入一个点,就在set中找到它的前驱和后继(注意是环形的),先判断该点是否在已有凸包内,再判断它的前驱和后继是否在新的凸包上,不断删点直到满足为止,同时维护一下面积。贴一原创 2017-11-30 17:16:58 · 889 阅读 · 0 评论 -
bzoj 1027 合金【凸包】
解题思路:由于a+b+c=1,所以确定了a,b,那么c就被确定了,所以c这一维可以无视。把一种合金(a,b)看做平面上的一个点。那对于两个点A(a1,b1),B(a2,b2),那么线段AB就是它们可组成的合金,因为线段AB上的每个点都可表示为(xa1+(1-x)a2,xb1+(1-x)b2)(可以用向量证明)。如果再加入一个点C,那线段AB上任意一点到C的线段上所表示的合金都可炼成,即三角形ABC中原创 2017-11-23 11:33:40 · 356 阅读 · 0 评论 -
bzoj3564 信号增幅仪【最小圆覆盖+坐标变换】
解题思路:先把坐标系旋转a度,再把每个点的横坐标缩小p倍,求最小圆覆盖即可。 最小圆覆盖详见: https://wenku.baidu.com/view/584b6d3e5727a5e9856a610d.html 玄学O(n)算法。 这里附一张坐标旋转的图,一眼懂: #include<iostream>#include<cstdio>#include<cstring>#include原创 2017-11-24 21:22:05 · 301 阅读 · 0 评论 -
hdu1007 Quoit Design 【计算几何+分治】
题目大意:给出平面上n个点,求最近两点距离的一半。解题思路:很经典的平面分治题。假设我们把所有点按 xx 坐标平均分成了左右两个部分,设平分直线为x=x0x=x_0,那么最近点对(p,q)(p,q)的距离就是下面二者的最小值: (1)p,qp,q同属于左半边或右半边时的最近点对距离。 (2)p,qp,q属于不同区域时的最近点对距离。 对于情况(1),是与原题完全相同的子问题,可以递归处理。设左原创 2017-12-20 21:36:21 · 273 阅读 · 0 评论 -
poj3348 Cows【凸包模板】
解题思路:求出凸包后用面积除以50即为答案。#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<cmath>#include<ctime>#include<queue>#include<vector>#include<set>using nam原创 2017-11-24 11:01:35 · 206 阅读 · 0 评论 -
bzoj1038 瞭望塔【半平面交】
解题思路:可以发现,可以看到所有区域的点都位于轮廓线的上半平面交内,如样例:yy一下,发现最优修建地点就在轮廓线或半平面交的转折点的垂线与另一条的交点所组成的线段,由于是交错递增的,可以O(n)处理出。这道题球半平面交时可以只用栈,因为后面的直线不可能与最前面的相交。#include<iostream>#include<cstdio>#include<cstring>#include<stri原创 2017-11-24 16:02:08 · 339 阅读 · 0 评论 -
bzoj 2178 圆的面积并【辛普森积分】
解题思路:辛普森积分可以求过三点(l,f(l)),(mid,f(mid)),(r,f(r))(l,f(l)),(mid,f(mid)),(r,f(r)),其中mid=(l+r)/2mid=(l+r)/2的抛物线在(l,r)(l,r)一段的积分。其公式为:∫rlf(x)=(r−l)6(f(l)+4f(mid)+f(r))\int _l^rf(x)=\frac{(r-l)}{6}(f(l)+4f(mid原创 2017-12-07 10:58:16 · 429 阅读 · 0 评论 -
bzoj2395 Timeismoney【最小乘积生成树】
解题思路:题目即是求令∑ci∗∑ti\sum c_i*\sum t_i最小的生成树。我们把∑ci\sum c_i看做横坐标xx,∑ti\sum t_i看做纵坐标yy,要求k=xyk=xy最小,即是使得函数y=kxy=\frac{k}{x}最接近坐标轴。而一个点对应了一个函数,这些函数要么重合,要么不相交。 所以我们要找的点一定在一个左下部分的凸包上。看网上的题解求凸包左下部分都是用的分治法。1.首原创 2017-12-22 18:14:50 · 430 阅读 · 0 评论 -
poj1912 A highway and the seven dwarfs【凸包+二分】
题目大意:给出n个点,m条直线,对于每条直线,问所有点是否都在该直线同一侧。解题思路:即是问n个点的凸包是否在直线同一侧。 若直线与凸包有交点,那直线与凸包的两个切点一定在直线两侧。 所以我们可以将凸包上每条直线的倾斜角求出,对于每条直线二分找到两个切点,判断两个切点是否在直线两侧即可。具体细节见代码注释。#include<iostream>#include<cstdio>#include<原创 2017-12-22 14:43:05 · 461 阅读 · 0 评论 -
poj3845 Fractal 【坐标变换】
题目大意:给一条折线,每一次操作把这条折线的所有线段变换成跟这条折线的相同形状,重复d次。问此时从头到尾走全长的f(0≤f≤1),将停在哪个点上。解题思路:假设做了一次分形后得到折线长度是原来的kk倍,则深度为d的分形(操作了d-1次)的长度是原来的kd−1k^{d-1}倍。若当前线段增长后已经超出了所剩余的长度,就相当于确定变换后的直线在当前线段上,那么递归kd−2k^{d-2},确定下一次变换的原创 2017-12-22 08:45:55 · 299 阅读 · 0 评论 -
bzoj2391: Cirno的忧郁【三角剖分+Splay】
解题思路:我们先把所有点极角排序,固定点价值视为0,预处理出sum[i][j]表示极点O到点i(固定点)和极点到点j(固定点)所圈成的三角形内的青蛙价值,逆时针为正,顺时针为负,那对于一次询问,只需要像求多边形面积一样把相邻两点的sum加起来即可。那如何预处理出sum[i][j]呢?我们可以枚举i并以Oi为初始抽,逆时针加入j点,算出向量Oi与向量ij的cos值,若之前加入的一个点k在三角形Oij内原创 2017-11-25 16:25:37 · 522 阅读 · 1 评论 -
bzoj1069 最大土地面积【凸包+旋转卡壳】
解题思路:讲真,这题数据有点水,要是只给一个凹四边形就gg了。 所以我们假设求出来的是个凸包……。 考虑O(n2n^2)枚举对角线,那么就是求以对角线为底上下两个最大的三角形,可以采用旋转卡壳的思想来做,注意到随着对角线转动,最优顶点也在同向转动,所以直接跳指针即可。#include<iostream>#include<cstdio>#include<cstring>#include<st原创 2017-11-25 10:12:11 · 286 阅读 · 0 评论