
扫描线
zxyoi_dreamer
退役了退役了爬了爬了,搞个锤子算法竞赛,不如好好享受大学生活。
展开
-
【JOI 2020 Final】【LOJ3256】火灾(扫描线)(树状数组)
传送门题解:首先容易注意到询问可以查分为前缀询问。然后注意到询问本质上就是求 [i−T,i][i-T,i][i−T,i] 的最大值之和。一个比较直接的思路是考虑每个值在答案中出现了多少次,发现不好维护,不过这可以给我们一些启发。考虑统计每个位置上值的变化量。构造一个平面直角坐标系,横坐标表示序列中的下标,纵坐标表示时间,每个整点上有一个值表示 Sx(y)S_x(y)Sx(y)。初...原创 2020-04-01 11:46:39 · 735 阅读 · 0 评论 -
【校内模拟】多边形(凸包DP)(极角序扫描线)(前缀和优化DP)
简要题意:给平面一个点集,对内空凸多边形计数。保证没有三点共线。n≤500n\leq 500n≤500题解:模板题难度的凸包DP?(大概)然而这是我第一次写凸包DP,以前都是靠口胡。按照 xxx 为第一关键字,yyy 为第二关键字进行坐标排序,枚举多边形左下角的点。设 f[o][i][j]f[o][i][j]f[o][i][j] 表示起始点标号为 ooo 按照极角序考虑的最后一条...原创 2020-02-17 22:47:47 · 510 阅读 · 0 评论 -
【WC2013】平面图(平面图转对偶图)(最小左转法)(扫描线点定位)(瓶颈路)
传送门题解:板子一大堆。首先容易发现我们要求的就是对偶图的瓶颈路。最小左转法转对偶图,询问离线,扫描线进行点定位,然后随便用你喜欢的方式求一下瓶颈路即可。代码:#include<bits/stdc++.h>#define ll long long#define re register#define db double#define cs constnames...原创 2020-01-10 17:14:43 · 411 阅读 · 0 评论 -
【ZJOI2008】Risk(最小左转法)(点定位)(扫描线)
传送门题解:显然要做的事情就是确定平面划分然后上一遍扫描线点定位。点定位的具体做法其实就是扫描线一下,找到自己上方第一条边,就能确定自己所在的平面了。如果本身平面图上的点是连通的可以直接上最小左转法,但是题目里面第二个图那种就会出事。解决方法是先搞出连通块,每个连通块最高的点用点定位的方法找到上方第一条线段,然后连到端点,这样不会破坏原来图的平面划分。然后上最小左转法。代码:#i...原创 2020-01-10 11:01:59 · 370 阅读 · 0 评论 -
【BZOJ2391】Cirno的忧郁(三角剖分)(平衡树维护极角序扫描线)
传送门题解:首先题目似乎没有说不存在三点共线的情况。。。于是,我随便找了5篇题解,全部可以被以下两组数据中的一组或两组hack。3 10 22 22 01 2 1231 2 333 2 13 10 22 22 01 1 1231 2 333 2 1先讲一下思路:考虑类似面积的处理,我们从原点向多边形顶点连线,将原多边形剖成若干三角形。计算面积...原创 2020-01-09 10:46:03 · 384 阅读 · 0 评论 -
【HUNNU11563】Super Shuttle(圆的反演)(扫描线)
传送门题解:给一个定点和一堆圆,请你画一个过定点的圆,使得它与尽可能多的圆相交。直接反演后就是求一条直线穿过尽可能多的圆,考虑答案直线一定可以平移到与某个圆相切,直接枚举这个相切的圆,求出它与其他所有圆相交的范围,然后极角序扫描线即可。由于题目什么都没有保证,细节贼多,我现在怀疑std挂了。。。过的也只有一个长达20K的代码,估计是面向数据编程吧。。。我的代码没有AC,就不放了。...原创 2019-12-30 11:20:44 · 266 阅读 · 0 评论 -
【GXOI/GZOI2019】特技飞行(扫描线)(线段树)(曼哈顿距离转切比雪夫距离)
传送门感觉是一道和计算几何没有什么关系的计算几何题解:容易注意到其实题目分为完全不相干的两个部分。首先是算ccc的出现次数,然后是计算最多和最少能够出现多少个aaa。交换的最多次数其实就是交点个数,因为交点个数就是逆序对个数。或者可以感性理解一下,如果在每个相交的地方都交换方向,显然全程所有飞机的相对顺序都不会改变,最后结果就一定符合要求。根据一点群论知识知道把最终排列结果看作是一...原创 2019-10-16 14:17:33 · 238 阅读 · 0 评论 -
【CF793G】Oleg and chess(扫描线)(线段树)(ODT)(最大流)
传送门题解:MD板子敲错毁一生显然我们要搞一下看哪些位置能放。而每个位置只能放一个的限制也就变成行列的匹配。给出的矩形意味着这些行列不能匹配。显然不能直接建图跑匹配。考虑对于行列分别建一棵线段树,则我们想办法把合法区域拆成若干不相交矩形。可以直接借助ODT进行划分,具体实现请参见代码。代码:#include<bits/stdc++.h>#define ll lo...原创 2019-10-07 14:32:38 · 329 阅读 · 0 评论 -
【CF337D】Developing Game(扫描线)(线段树)
传送门题解:这题做法挺多的,不过感觉扫描线要好写很多。对于一个合法的选取集合SSS,显然有maxi∈Sli≤mini∈Svi≤maxi∈Svi≤mini∈Sri\max_{i\in S}l_i\leq \min_{i\in S}{v_i}\leq \max_{i\in S}v_i\leq \min_{i\in S}r_imaxi∈Sli≤mini∈Svi≤maxi∈Svi...原创 2019-09-24 21:08:02 · 228 阅读 · 0 评论 -
【HNOI2019】鱼(极角序扫描线)
传送门题解:发现我们可以枚举AD,然后对于所有B,C,合法的AD应该是在一条直线上的,这个直线可以搞出来,对于所有的AD,合法的BC中点应该在AD线段上,这个可以lower_bound+upper_bound随便算出来。然后考虑怎么算EF,直接极角序扫描线,按照极角序枚举A,统计在合法角度范围内的距离D一定值的有多少个,可以直接用哈希表。代码:#include<bits/std...原创 2019-08-28 14:51:43 · 247 阅读 · 0 评论 -
2018.03.08【JSOI2018】【洛谷P4518】【BZOJ5316】绝地反击(二分图匹配)(退流)(扫描线)
洛谷传送门BZOJ传送门解析:我们首先二分答案。然后判断如果一条飞船在时限内甚至飞不到圆周上就肯定gg了。如果能的话,我们将圆周分为nnn等份,第一份是从xxx轴开始的1/n1/n1/n圆,我们看这条飞船能不能飞到整个圆,如果能,就和每个区间连一条边。如果不能我们将它和整个圆匹配,就先记录哪些区间的端点是能够匹配的,然后记录下匹配的最左端点和未匹配的最左端点。跑二分图最大匹配,如果...原创 2019-03-09 10:52:21 · 240 阅读 · 0 评论 -
2019.03.07【SDOI2018】【洛谷P4605】【BZOJ5328】物理实验(扫描线)
洛谷传送门BZOJ传送门解析:没什么难度的计算几何模拟题,直接上斜着的扫描线就行了。代码:#include<bits/stdc++.h>using namespace std;#define ll long long#define re register#define gc get_char#define cs constnamespace IO{ inl...原创 2019-03-08 21:28:43 · 268 阅读 · 0 评论