PAT L3-012 水果忍者

PAT的训练题中比较复杂的一道,网上很难找到题解,于是我来发一波


目链接:https://www.patest.cn/contests/gplt/L3-012


如果存在某条直线符合题意,那么可以把它向下平移,直到碰到某个水果的下端端点,我把这个端点称为“卡子”。再旋转(顺逆时针皆可),即可碰到另一个“卡子”。这时候这条直线就是过两个水果端点的直线。

那么我只要枚举所有的水果下方的端点作为一个“卡子”,看看过这个点的直线有没有哪条能穿过所有水果。
先只考虑右边的水果。比如对于该水果右边的所有水果,如果这条直线能穿过他们,那么水果们的上方端点一定都在直线上方(或者在直线上),下方端点一定在直线下方(或者在直线下)。也就是说这条直线的斜率一定小于所有的右边水果上方端点和“卡子”连线的斜率,大于所有右边水果的下方端点和“卡子”连线的斜率。将右边的允许的最大斜率记为krmax,最小斜率记为krmin,那么符合的直线斜率k一定满足
krmax >= k >= krmin(仅仅是对于右边而言的)
对于左边的水果也同理,将左边的允许的最大斜率记为klmax,最小斜率记为klmin。
符合条件的直线斜率k一定满足
klmax >= k >= klmin(仅仅是对于左边而言的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值