简单来说,就是在一段有n个可以开设站台的位置上,选取其中的m个,使得每两个站台之间的最小距离取得最大值。
也就是说,你要让这m个站台中,每两个站台之间的距离都尽可能大。
因为题目要求输出最短位置,我们就把最短距离拿来二分!
1.我们需要一个函数OK来计算以L为最短距离能够开设多少家店。
函数构造是基本二分Bool类型的一个常用函数:
bool ok(int x){
int tmp=1;
int last=1;
for(int i=1;i<=n;i++){
while(a[i]-a[last]<x){
i++;
if(i>n){
return tmp>=m;
}
}
last=i;
tmp++;