题面描述 在$xOy$直角坐标平面上有$n$条直线$L_1,L_2,...,L_n$,若在$y$值为正无穷大处往下看,能见到$L_i$的某个子线段,则称$L_i$为可见的,否则$L_i$为被覆盖的.例如,对于直线:$L_1:y=x; L_2:y= x; L_3:y=0$则$L_1$和$L_2$是可见 ...
分类:
其他好文 时间:
2019-04-20 10:02:39
阅读次数:
135
"bzoj 1007 水平可见直线" 这里的半平面都是 $y\geq kx+b$ 类型的,将直线 $l:y=kx+b$ 对应到点 $(k, b)$ ,转化成凸包求解即可. 如果有两种类型,需分类后分别求上下凸包,最后去重,合并. cpp include using namespace std; de ...
分类:
其他好文 时间:
2019-02-16 19:25:57
阅读次数:
195
先按斜率从小到大排序,然后如果排在后面的点B和前面的点A的交点是P,那B会把A在P的右半段覆盖掉,A会把B在P的左半段覆盖掉。 然后如果我们现在又进来了一条线,它跟上一条的交点还在上一条和上上条的左边,这就说明上一条完全被覆盖了 这样的话,维护一个单调栈做一做就可以了 (要先处理一下,斜率相同的只留 ...
分类:
其他好文 时间:
2018-09-12 13:58:16
阅读次数:
158
题目链接 "bzoj1007: [HNOI2008]水平可见直线" 题解 显然,维护一个下凸壳~~(是这么叫吧)~~ 按斜率小及大排序 引入直线啊 令直线a斜率小与等于直线b时 令a挡住b 那么a与b之前相交的直线c的交点必然在b与c交点的左边 这样a与b的交点才会在直线c的左边 用单调栈维护 斜率 ...
分类:
其他好文 时间:
2018-04-28 20:58:41
阅读次数:
161
题目大意 给你$n$条直线$y=kx+b$,问你从$y$值为正无穷大处往下看能看到那些直线。 $1\leq n\leq 500000$ 题解 如果对于两条直线$l_i,l_j$,$k_i=k_j$且$b_i b_j$,那么$l_j$不可能被看见。 把直线按$k$从小到大排序。如果发生了下图的情况(即 ...
分类:
其他好文 时间:
2018-03-05 19:35:56
阅读次数:
156
其实并不算标准半平面交?但是思路差不多 先按照斜率排序,然后用栈维护凸壳,每遇到重斜率或a[i],s[top 1]交点的x轴在s[top],s[top 1]交点左侧,则说明s[top]被a[i],s[top 1]覆盖,弹栈即可; cpp include include include using n ...
分类:
其他好文 时间:
2018-03-04 22:12:03
阅读次数:
168
题目描述 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的. 例如,对于直线:L1:y=x; L2:y=-x; L3:y=0则L1和L2是可见的,L3是被覆盖的.给出n条直线,表示成y=Ax+B的形式(| ...
分类:
其他好文 时间:
2018-03-03 16:56:43
阅读次数:
128
传送门 Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的.例如,对于直线:L1:y=x; L2:y=-x; L3:y=0则L1和L2是可见的,L3是被覆盖的.给出n条直线,表示成y ...
分类:
其他好文 时间:
2018-02-27 01:12:35
阅读次数:
148
可以想象最终在上面的图形是一个半凸包所以只需要按照斜率排序将前面的直线都推到一个栈里如果新加入的直线和栈顶直线交点在之前交点的左面那么凸包栈顶的直线就被覆盖了,弹出就可以了 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> ...
分类:
其他好文 时间:
2018-01-31 01:04:18
阅读次数:
160
不会写半平面交…然后发现可以转成对偶凸包问题 具体见这里:http://trinkle.blog.uoj.ac/blog/235 相关的原理我好像还是不太懂…orz ...
分类:
其他好文 时间:
2018-01-21 12:38:20
阅读次数:
156