二分从来都没有把握,这次居然1A,纪念一下
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[50005]{0};
int b[50005]{0};
int main()
{
std::ios::sync_with_stdio(false);
int l,n,m;
cin>>l>>n>>m;
a[n+1]=l;
int i,j;
int ll=0x3f3f3f3f;
for(i=1;i<=n;i++)
{
cin>>b[i];
}
b[n+1]=l;
sort(b,b+n+2);
for(i=1;i<=n+1;i++)
{
a[i]=b[i]-b[i-1];
ll=min(ll,a[i]);
}
int rr=1000000000;
int mid;
int t;
while(ll<rr-1)
{
for(i=0;i<=n+1;i++)
b[i]=a[i];
t=0;
mid=(ll+rr)/2;
for(i=1;i<=n+1;i++)
{
if(b[i]<mid)
{
t++;
if(i<n)
b[i+1]+=b[i];
}
}
if(t<=m)
{
ll=mid;
}
else
rr=mid;
}
cout<<ll<<endl;
}