1 条题解
-
0
「PA 2020」Samochody dostawcze 题解
算法思路
本题使用哈希映射和碰撞检测的简单方法来解决车辆调度问题。核心观察是两辆车相撞的数学条件可以通过简单的坐标变换来表示。
关键观察
1. 车辆运动模型
- 类型1车辆:从 向北行驶,在时刻 的位置为
- 类型2车辆:从 向东行驶,在时刻 的位置为
2. 碰撞条件
两辆车在 处相撞的条件是:
- 类型1车辆:,
- 类型2车辆:,
联立得: 且
消去 得到:
代码解析
数据存储
map<int, int> mp[2]; // mp[0]存储类型1车辆,mp[1]存储类型2车辆 while (n--) { int x, w, t; cin >> x >> w >> t; mp[x - 1][w - t]++; // 关键:使用 w-t 作为键值 }
碰撞检测与计数
// 确保所有可能的碰撞键值都存在 for (auto [x, y] : mp[0]) mp[1][x] += 0; int ans = 0; // 对于每个可能的碰撞位置,取两种类型车辆数量的最小值 for (auto [x, y] : mp[1]) ans += min(y, mp[0][x]);
算法正确性
碰撞条件推导
对于类型1车辆 和类型2车辆 :
- 它们在某个时刻 在 相遇
- 类型1车辆: ⇒
- 类型2车辆: ⇒
- 因此 ⇒
最少取消数量
对于每个碰撞键值 :
- 有 辆类型1车辆和 辆类型2车辆可能相撞
- 最多只能保留 对不相撞的车辆
- 因此需要取消的数量是两者中较小的那个
复杂度分析
- 时间复杂度:(map 操作)
- 空间复杂度:
- 1
信息
- ID
- 3576
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者