总算是补完 ZJOI2019 了(
首先,排名为 1 的显然是个半平面交问题(把每条直线看做其上方的整个半平面,求交,边界上的就是排名为 1 的)。
实际上也就是求一个下凸壳。
注意 x 是非负整数。
那么考虑排名为 2 的。
显然把排名为 1 的删去之后,排名为 2 的一定也在下凸壳上。
但这只是必要条件,并不充分。因为还应该存在某个 x 使得此处只有一条排名为 1 的直线在其上方。
这个的处理方法是枚举一条排名为 1 的直线,二分出其在凸壳上覆盖的位置,然后扫描线便可得到所有直线的覆盖情况了。
然后排名为 3,4,…,m 的都类似。
不过这道题出于方便,可以直接用解析式存一条直线。
以及,需要手写一个带分数类……
代码:
1 |
|