嫌疑人X思路
2025-08-06 16:04:23
发布于:浙江
问题分析:
需要判断每个嫌疑人是否能洗清嫌疑。判断标准是:如果嫌疑人无法在所有犯罪事件和自己的不在场证明之间进行合理移动(即移动速度不超过 1 单位时间 / 单位距离),则可以洗清嫌疑。
核心观察:
- 犯罪者必须在所有犯罪事件发生时出现在对应地点。
- 嫌疑人的不在场证明是其在特定时间的位置。
- 若嫌疑人是犯罪者,那么他必须能在所有犯罪时间点之间以及与不在场证明时间点之间,以不超过 1 单位 / 时间的速度移动。
- 只需检查嫌疑人与时间上相邻的犯罪事件是否能合理移动即可,因为如果能在相邻两点间合理移动,则能在所有点间合理移动。
算法核心:
- 对所有犯罪事件按时间排序。
- 对于每个嫌疑人的不在场证明,找到与其时间最接近的前后两个犯罪事件。
- 检查嫌疑人是否能在不在场证明时间点与这两个(或一个)犯罪事件时间点之间合理移动。
- 若存在任何一段无法合理移动,则该嫌疑人可洗清嫌疑。
步骤分解: - 数据预处理:
o 读取所有犯罪事件的位置和时间。
o 按时间对犯罪事件进行排序,便于后续查找。 - 处理每个嫌疑人的不在场证明:
o 读取嫌疑人的位置和不在场证明时间。
o 根据时间找到该时间点前后的犯罪事件(利用二分查找提高效率):
o 若不在场证明时间早于所有犯罪时间,只需检查与最早的犯罪事件是否能合理移动。
o 若不在场证明时间晚于所有犯罪时间,只需检查与最晚的犯罪事件是否能合理移动。
o 若在中间,则检查与前后两个犯罪事件是否能合理移动。 - 合理性判断:
o 两点之间的欧几里得距离是否小于等于时间差(因速度≤1,距离≤时间差)。
o 为避免浮点数运算,比较距离的平方与时间差的平方。 - 结果统计:
o 若嫌疑人与任一相关犯罪事件之间无法合理移动,则计数加 1。
o 最终输出可洗清嫌疑的总人数。
这里空空如也







有帮助,赞一个