1 条题解
-
0
题意简化
- 敌人 在 轴上方
- 发射源 和激光塔 在 轴下方
- 选两个激光塔 连成线段(能量墙)
- 选一个发射源 和一个敌人 连成线段(攻击射线)
- 要求两条线段相交
- 保证无重点、无三点共线
关键几何性质
由于 在 轴下方, 在 轴上方,线段 必然穿过 轴。
两条线段相交的充要条件是:
- 和 在直线 的两侧
- 和 在直线 的两侧
但我们可以简化:
对于固定的 ,直线 将平面分成两个半平面。
和 必须在 的两侧,它们的连线才可能与 相交(另一条件自动满足,因为 和 分别在 轴两侧,而 在 轴下方,要相交必须分隔它们)。
优化思路
直接枚举四元组 不可行。
优化:固定 ,计算激光塔在直线 两侧的数量 和 ,则这对 的贡献是 。
这样复杂度为 ,最坏 ,但实际运行常数小,可以接受。
算法步骤
- 读入 个敌人坐标
- 读入 个发射源坐标
- 读入 个激光塔坐标
- 初始化答案
- 对每个发射源 和每个敌人 :
- 统计激光塔在直线 两侧的数量 和
- 输出
复杂度分析
- 时间复杂度:
- 空间复杂度:
对于 ,最坏 次运算,在 C++ 中经过编译器优化后可以在几秒内通过。
- 1
信息
- ID
- 4847
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者