没用二分,用取平均值排除法+枚举做的,一开始第9个点一直WA,后来增大了枚举范围,然后就这样了。。。
感觉算法没问题啊,为什么会这样呢???
评测记录 https://www.luogu.com.cn/record/38273577
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int l,n,k;
scanf("%d%d%d",&l,&n,&k);
int x[n+2],begin=0,end,sum_l=l,sum_n=n+k+1;
for(int i=1;i<=n;++i){
scanf("%d",&end);
x[i]=end-begin;
begin=end;
}
x[n+2]=l-end;
sort(x+1,x+n+2);
double average;
int pos=1;
while(average=(double)sum_l/sum_n){//排除无关值
if(x[pos]<average){
for(int i=pos;i<=n+1;++i){
if(x[i]<average){
pos=i+1;
sum_l-=x[i];
sum_n--;
}
else break;
}
}
else break;
}
int A=ceil(average),num_divide=0;
while(1){//枚举结果
num_divide=0;
for(int i=pos;i<=n+1;++i) num_divide+=ceil((double)x[i]/A)-1;
if(num_divide>k) A++;
else break;
}
printf("%d",A);
return 0;
}