Codeforces 607E - Cross Sum(二分答案+扫描线+计算几何)

首先考虑如何找到距离给定点第 m 大的交点。二分答案 mid,以 (x,y) 为圆心,mid 为半径做圆,那么如果一条直线和圆没有交点显然也不能和其他点相交,否则我们求出它和圆的两个交点的幅角 θli,θri,那么两个直线在圆内相交当且仅当 [θli,θri],[θlj,θrj] 有交,离散化+扫描线即可。

接下来考虑找到第 m 大交点以后如何求和,注意到 m 很小,所以可以直接 set 求出所有交点坐标后暴力计算。值得注意的是,圆上交点个数可能很多,因此我们需要求出圆内所有交点坐标和以及个数 cnt,然后用 (mcnt)×mid 即可算出圆上相交的交点的贡献。

时间复杂度 nlogVlogn+m

posted @   tzc_wk  阅读(56)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2021-08-08 Codeforces 1063F - String Journey(后缀数组+线段树+dp)
2021-08-08 Atcoder Grand Contest 038 F - Two Permutations(集合划分模型+最小割)
2021-08-08 洛谷 P5502 - [JSOI2015]最大公约数(区间 gcd 的性质+分治)
点击右上角即可分享
微信分享提示