就是给你
n
(
n
≤
2000
)
n(n\leq2000)
n(n≤2000)个整数点,让你求一条直线,使得距离这条直线小于等于
d
d
d的点数最多
题解
首先直接求显然是很难的,不妨倒着思考
也就是假如你知道了答案的直线,然后想象两条距离他为
d
d
d的两条平行线,我们先约定将两条直线组合起来,也就是一条动另一条跟着动,那么我们可以将其中一条的位置移动使得最边缘的点到达这条直线上,显然这样不会对答案造成影响,那么现在我们可以枚举这个节点,即靠在这条直线上的点,那么然后我们怎么找出这条直线的斜率呢?(斜率确定了那么答案也就确定了),可以考虑对于其他的
n
−
1
n-1
n−1个点,计算出每一个点被上述两条直线构成的组合夹在其中时的斜率范围,然后就转化为了最打区间覆盖问题了,这里我才用的方法是直接将
d
o
u
b
l
e
double
double离散化,然后转化为区间加,区间最大值问题,这个
u
n
i
q
u
e
unique
unique是找的C++
r
e
f
e
r
e
n
c
e
reference
reference上的代码改了一下,开始自己写的数组版本被卡了