题解/算法 {5569. 奶牛过马路}
@LINK: https://www.acwing.com/problem/content/description/5572/;
没找到思路的话, 还是挺难的…
显然有2种情况: {人始终在车前面; 人始终在车后面};
第一种情况, 人肯定是以全速走的; 而第二种情况 你可能会去模拟 人按照车的轮廓去走 (动态的调整速度), 这很复杂太多了…
思路很重要…
第一种情况 人是全速的; 第二种情况 人不是全速的 那么此时 其实你可以把他转换成是全速的, 想象以下 人以全速的走, 如果和车相撞了 那么人就从起点(0,0) 退到 (0, C) 其中C<0的位置上 重新让人以全速的走 他会和车侧肩而过; (仔细思考下 这是等价的, 你可以找到一个起点(0,C) 从他全速的出发 车在人前面 但正好是擦肩而过);
因此就分为2种情况:
1: 无需往回退, 即从(0,0)全速;
2: 往回退到(0,C), 全速;
他们可以归结为1个算法问题: 从(0,C)位置全速 会不会与车相撞?
. 其等价于: 在任意t时刻, 设车与Y轴的相交线段是[yl, yh] 此时人在yc点, 那么 如果yc<=yl || yc>=yh 那么就不会相撞; 但这太复杂了, 因为t时刻的取值 是无穷大的…
. 继续细分, 不相撞 分为2种情况: {人在车前面, 人在车后面};
因此, 转换问题: 从(0,C)全速 人能否始终在车前面? (C<=0)
.

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



