洛谷 P2678 跳石头
P2678 跳石头
二分
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define maxn 1000000 4 #define inf 1<<30 5 6 int n,m,c,pos[maxn]; 7 8 bool check(int now) 9 { 10 int f=0,s=0; 11 for(int i=1;i<=n+1;i++) 12 { 13 if(pos[i]-s<now) f++; 14 else s=pos[i]; 15 } 16 return f>m?false:true; 17 } 18 19 int main() 20 { 21 scanf("%d%d%d",&c,&n,&m); 22 for(int i=1;i<=n;i++) scanf("%d",&pos[i]); 23 int l=1,r=c; pos[n+1]=c; 24 while(l+1<r) 25 { 26 int mid=(l+r+1)/2; 27 if(check(mid)) l=mid; 28 else r=mid; 29 } 30 if(check(r)) l=r; 31 printf("%d\n",l); 32 return 0; 33 }