#include <iostream> using namespace std; int L,N,M; int d[50050]={0}; bool pd(int mid){ int cnt=0; int s=0; for(int i=1;i<=N+1;i++){ if(d[i]-s<mid)cnt++; else s=d[i]; } return cnt<=M; } int main() { cin>>L>>N>>M; for(int i=1;i<=N;i++) cin>>d[i]; d[N+1]=L; int l=1,r=L; while(l<r){ int mid=(l+r+1)/2; if(pd(mid)) l=mid; else r=mid-1; } cout<<l; return 0; } 二分法:二分查找、二分答案 注意: 1、写代码时,主函数中的变量需要初始化。 2、写数组时,数组的范围不要使用变量,要根据题目设置的最大范围创建数组。 3、声明变量名时,算法结构的变量名尽量保持一致,养成习惯。 作业:1244,1912 |