[JZOJ6037]【GDOI2019模拟2019.3.1】鸽子 [CodeForces 780H] 【无实现】【计算几何】

本文深入探讨了一种针对鸽群动态距离变化的高效算法。通过分析鸽子的坐标随时间变化的分段函数,利用二次函数特性进行二分查找,最终在O(nlogAns)的时间复杂度下解决难题。关键步骤包括参数方程建立、二分答案区间搜索及区间合法性验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

在这里插入图片描述
在这里插入图片描述

Solution

这题感觉十分的熟悉

感觉是一道神仙题?

其实没有那么难
考虑鸽子的x坐标与y左边分别关于时间t的参数方程x(t),y(t)x(t),y(t)x(t),y(t),它是有n段的分段一次函数

考虑f(t)=dis((x(t),y(t)),(x(t+Δ),y(t+Δ))),Δ=Cmf(t)=dis\left((x(t),y(t)),(x(t+\Delta),y(t+\Delta))\right),\Delta={C\over m}f(t)=dis((x(t),y(t)),(x(t+Δ),y(t+Δ))),Δ=mC,即t时刻第一只鸽子和走在它前面的前一只鸽子的距离

显然将它平方以后它是一个分段二次函数,段数也是O(n)的。

我们二分答案R,在每段二次函数上求出f(t)≤Rf(t)\leq Rf(t)R的所有t的区间
考虑一个t怎样才是合法的,它要满足对于每只鸽子对应的fff都小于等于RRR,即f(t),f(t+Δ),f(t+2Δ),...,f(t+(m−1)Δ)f(t),f(t+\Delta),f(t+2\Delta),...,f(t+(m-1)\Delta)f(t),f(t+Δ),f(t+2Δ),...,f(t+(m1)Δ)均在合法区间内。

那么将区间位置对于Δ\DeltaΔ取模(这里说法不太严谨,就是将所有区间都映射到[0,Δ][0,\Delta][0,Δ]内)
如果存在某个t∈[0,Δ]t\in[0,\Delta]t[0,Δ]被映射后的所有区间覆盖了m次,那么就是合法的。

将区间端点排序后扫一遍即可。

这样就在O(nlog⁡Ans)O(n\log Ans)O(nlogAns)的时间复杂度解决了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值