别人的代码,自己边界总是控制不好,还不知道哪里错了!思维!这种问题代码越简洁反而越不容易错吧。。
1 #include<stdio.h> 2 #include<algorithm> 3 typedef long long ll; 4 using namespace std; 5 ll n,m,L,a[100010]; 6 bool bi(ll x){ 7 ll i,cnt=0,now=0; 8 for(i=1;i<=n;i++){ 9 if(a[i]-a[now]<=x)cnt++; 10 else now=i; 11 } 12 if(L-a[now]<x)return 0; 13 return cnt<=m; 14 } 15 int main(){ 16 ll i,l,r,mi; 17 while(~scanf("%lld%lld%lld",&L,&n,&m)){ 18 l=0;r=L; 19 for(i=1;i<=n;i++) 20 scanf("%lld",&a[i]), 21 r+=a[i]; 22 sort(a,a+n+1); 23 while(l<r){ 24 mi=l+r>>1; 25 if(bi(mi))l=mi+1; 26 else r=mi; 27 } 28 printf("%lld\n",r); 29 } 30 return 0; 31 }
时间: 2024-08-07 00:16:04