HNOI2019 简要题解
HNOI 2019 简要题解 没想到自己竟也能有机会写下这篇题解呢。 LOJ Luogu Day1T1 鱼 枚举 \(AD\) 两点后发现 \(BC\) 与 \(EF\) 相对独立,因此只需要计算合法的 \(BC\) 对数与 \(EF\) 对数,相乘即可。 先考虑计算 \(EF\) 的对数。确定 \(AD\) 后,满足条件的 \(EF\) 对数即为在某个半平面内与 \(D\) 点距离相等的点对数目。枚举 \(D\) 后若乱序枚举 \(A\) ,则需要再 \(O(n)\) 地处理 \(A\) 确定的半平面内的合法点对数目。可以按照极角序枚举 \(A\) ,并用单点指针确定半平面的范围,即可在总计 \(O(n^2)\) 的时间复杂度内解决这部分问题。 再考虑计算 \(BC\) 的对数。发现 \(AD\) 对 \(BC\) 的限制很强,直接限定了 \(BC\) 的斜率(或言之方向向量,因为有可能斜率不存在)以及中点坐标,因此可以考虑直接 \(O(n^2)\) 预处理出所有 \(BC\) 点对,每次查询时只需要在对应的值上二分找出范围限制即可。总时间复杂度 \(O(n^2\log n)\) 。 具体实现上,根据“与向量 \((a,b)\) 点积相同的点在一条垂直向量 \((a,b)\) 的直线上,与向量 \((a,b)\) 叉积相同的点在一条平行向量 \((a,b)\) 的直线上”