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+(m−1)Δ)均在合法区间内。
那么将区间位置对于Δ\DeltaΔ取模(这里说法不太严谨,就是将所有区间都映射到[0,Δ][0,\Delta][0,Δ]内)
如果存在某个t∈[0,Δ]t\in[0,\Delta]t∈[0,Δ]被映射后的所有区间覆盖了m次,那么就是合法的。
将区间端点排序后扫一遍即可。
这样就在O(nlogAns)O(n\log Ans)O(nlogAns)的时间复杂度解决了。