题解/算法 {5569. 奶牛过马路}

题解/算法 {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)
.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值