```cpp
#include <bits/stdc++.h>
using namespace std;
int d,n,m;
int a[1001000];
int l,r,mid,ans;
bool check(int x)
{
int t=0,wz=0,s=0;
while (s<n+1)
{
s++;
if (a[s]-a[wz]<x) t++;
else wz=s;
}
if (t>m) return false;
else return true;
}
int main(){
cin>>d>>n>>m;
for (int i=1;i<=n;i++)cin>>a[i];
a[n+1]=d;
l=1;
r=d;
while (l <= r)
{
mid = (l+r) / 2;
if (check(mid))
{
ans=mid;
l=mid+1;
}
else r=mid-1;
}
cout<<ans<<endl;
}
```
应该是思考的时候出问题了(建议检查草稿纸
by FrostDi @ 2023-06-18 18:03:33
@[2010_AC_gu](/user/722799) 不理解为什么在`a`数组最后添加`len`。
我的做法类似,多了个排序。
```cpp
#include<bits/stdc++.h>
using namespace std;
int n,m,l,i,t,w,mid,now,s,a[100000];
int main(){
cin>>l>>n>>m;
for(i=0;i<n;i++)cin>>a[i];
sort(a,a+n);
t=1;w=l;
while(t<w){
mid=(t+w+1)/2;
now=s=0;
for(i=0;i<n;i++){
if(l-a[i]<mid)break;
if(a[i]-now<mid)s++;
else now=a[i];
}
s+=n-i;
if(s<=m)t=mid;
else w=mid-1;
}
cout<<t;
}
```
by __Walter_Fang__ @ 2023-06-18 18:10:34
@[2010_AC_gu](/user/722799)
Hack:
```text
22 5 2
2
11
14
17
21
```
by creation_hy @ 2023-06-18 19:54:24
@[Walter_Fang](/user/609249) 添加的`len`是终点
by SnowFalling_2010 @ 2023-06-18 22:29:44
@[2010_AC_gu](/user/722799)
Hack:
Input:
```
8 3 1
2
4
7
```
Output:
Right:2
Wrong:1
by __Walter_Fang__ @ 2023-06-19 17:13:41
@[__Walter_Fang__](/user/609249) @[creation_hy](/user/576378)
感谢,已AC
```
#include<bits/stdc++.h>
using namespace std;
const int N=50100;
int len,n,m,l=0,r=1e9+1,mid,a[N],b[N];
bool check(int x) {
int m1=m;
for(int i=1; i<=n; i++) b[i]=a[i];
for(int i=1; i<=n-1; i++) {
if(b[i+1]-b[i]<x) b[i+1]=b[i],m1--;
}
return m1>=0;
}
int main() {
scanf("%d%d%d",&len,&n,&m);
a[n+2]=len,n+=2;
for(int i=2; i<n; i++) scanf("%d",&a[i]);
while(l+1<r) {
mid=(l+r)/2;
if(check(mid)) l=mid;
else r=mid;
}
printf("%d",l);
return 0;
}
```
by SnowFalling_2010 @ 2023-06-19 21:35:16
此帖结。
by SnowFalling_2010 @ 2023-06-19 21:35:45
@[__Walter_Fang__](/user/609249) 你这个样例我输出3(难崩)
by woshidabian @ 2023-08-06 10:18:26