对于20%的数据,0≤M≤N≤10。 对于50%的数据,0≤M≤N≤100。
对于50%的数据,0≤M≤N≤100。
对于100%的数据,0≤M≤N≤50,000,1≤L≤1,000,000,000。
最大化最小值,可以往二分答案方面考虑
#include<iostream>
#include<cstdio>
using namespace std;
#define maxn 50010
int L,l,r,n,m,a[maxn];
bool check(int x){
int sum=0,len=0;
for(int i=1;i<=n;i++){
len+=a[i]-a[i-1];
if(len<x){sum++;}
else len=0;
if(sum>m)return 0;
}
return 1;
}
int main(){
scanf("%d%d%d",&L,&n,&m);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
a[++n]=L;
r=L,l=0;
while(l<=r){
int mid=(l+r)>>1;
if(check(mid))l=mid+1;
else r=mid-1;
}
printf("%d",r);
}