死国矣……
v表示速度,h表示高度,s=Ah+Bv,约束条件化为 Ah+Bv≤C+Aminh+Bminv
搞两个数组,a按照 h从小到大排序,b按照 s从小到大排序。
任意顺序枚举 minv,开两个指针 l和 r,分别指着 a和 b的开头。
按照递增的顺序枚举 minh。
如果 b(r)s≤C+Aminh+Bminv,就将 r指针后移。如果 minv≤b(r)v≤CB+minv(这个 r是移动前的),就令当前统计的球员数量++
如果 a(l)h<minh,则将 l指针左移,并在左移前判断如果 minv≤a(l)v≤CB+minv
你可能会说,minv≤v这个条件没问题,但是为什么一定要 v≤CB+minv呢?
首先,若 v≤CB+minv,则 B(v−minv)≤C,对任意一个 h<minh,都有 A(h−minh)+B(v−minv)≤C,我们不会减掉没有出现过的答案。
那为什么不在去除答案的时候判断 s≤C+Aminh+Bminv呢?因为可能你移到某个 l时,依然 a(l)s>Aminh+Bminv+C但 a(l)h<minh,于是就没有减去贡献,就会使算出来的答案偏大。
1 条评论
XZYQvQ · 2018年10月30日 9:08 下午
当我在水博客的时候,大佬已经又双叒叕刷掉 N道题了。。。