「JOISC 2017」烟花棒

思路

不难想到答案具有单调性,直接二分速度 \(v\),考虑如何判断:

可以观察出的性质:

  • 任意时刻恰好只有一支烟花被点燃

  • 所有人向烟花被点燃的那个人方向跑

由上可以得到一个重要结论:

所有遇到点燃烟花的人的人会跟着他一起跑,直到烟花燃尽

原因在于这样做保证与前面的人距离更近,而与后面的人相对距离不变

那么遇到其他人可认为烟花燃烧时间增加 \(t\),转向只会发生在相遇瞬间

\(a_i=\frac{x_{i+1}-x_i}{2v} (i < k) , b_i=\frac{x_{i}-x_{i-1}}{2v} (i>k)\),问题转化为:

初始权值为 \(t\),依次取出 \(a,b\) 中的元素 (\(a\) 从后往前,\(b\) 从前往后),权值先减 \(a/b\) ,然后加 \(t\),求出一种取数方法使得权值始终非负。

考虑一种高妙的贪心,将元素划分为相邻的若干组,使得该组净权值非负,且任意真前缀净权值为负

这样我们每次只会选择完整的一组,且我们选择的应该是 a,b 中 真前缀净权值min 较大的一组。

还有一个问题,最后可能剩下一段元素,他们的净权值为负。

但注意到末状态的权值是确定的,可以考虑时间倒流,每次减去 \(t\) , 然后加上 \(a/b\) ,同样保证权值始终非负

这样新的净权值一定为正,我们可以按照上述方法再做一遍贪心。

当然,如果选不完则不行。

总结

  1. 寻找过程中的不变量

  2. 如果末状态已知,可以倒着考虑

posted @ 2022-03-30 22:42  chihik  阅读(45)  评论(0编辑  收藏  举报