临近一个月得知区域赛有了名额,可能也不算是好消息,大概率会延续去年打铁的经历。但不管怎样,我都会全力以赴,就算失败,我也会坦然地告诉自己尽力了,没有什么遗憾。
紧急进行一个小规划:争取每天练一道铁铜牌区分线的题,限时作记录,写题解。周五/六/日有精力就vp一场区域赛。但还是要记住,不要因为比赛荒废了学业。
D Walker
一道并不难的分类讨论,但被蒟蒻想得有点复杂了,写了两个小时濒临崩溃。最后三分的部分写得有点小毛病,不然就ac了(但其实几乎是猜出来的qwq)。
显然每个人的覆盖部分一定是一段连续的区间,那么可以按照 每个终点是先被谁覆盖的,来进行分讨:
- 两个端点均是被同一个人覆盖的,那么另一个人就没有任何贡献,相当于只有一个人走,这种情况非常简单。
- 每个端点都是被离得较远的那个人先覆盖的。在这种情况下,容易想到两个人均不折返,直达终点可以使得时间最小化,也比较容易求。
- 每个端点都是被离得较近的那个人先覆盖的。在这种情况下,首先可以确定的是,两个人都不会越过对方的起点(因为起点后面的段最终都会被对方覆盖)。因此可以发现两个区间满足:一个区间是以 \(0\) 开头的前缀,另一个是以 \(n\) 结尾的后缀。那么显然,前缀结尾和后缀结尾相同时取最优解。设这个位置是 \(p\),那么答案可以表示成:
\[max(\frac{p + min(p_{1}, p - p_{1})}{v_{1}}, \frac{n - p + min(n - p_{2}, p_{2} - p)}{v_{2}})
\]
其中 \(p \in [p_{1}, p_{2}]\)。
有好几种方法可以求解这个函数的最小值:
- 猜测这个函数是凸性的,于是直接三分求最小值(蒟蒻就是这么做的,不会证明,结果居然是对的)
- 显然答案是具有二段性的,因此还可以考虑直接二分答案
check函数可能比较难写
具体看一下这个人写的博客:blog - 貌似还有直接推式子的解法?那真的是蛮nb的。
code