1 条题解
-
1
#include <iostream> #include <algorithm> using namespace std; int l,n,k,a[100001],le,ri,mid,ans; bool check(int x)//是否能通过新增<=k的路标使空旷指数为x { int cnt=0;//新增路标数 for (int i=2;i<=n;i++) { if (a[i]-a[i-1]>x)//当前路标与前一路标相差超过空旷指数 { if ((a[i]-a[i-1])%x==0)//能整除 { cnt+=(a[i]-a[i-1])/x-1;//只需要当前路标与前一路标相差距离/x-1 } else { cnt+=(a[i]-a[i-1])/x;//否则需要当前路标与前一路标相差距离/x,再多加一个 } } } return cnt<=k; } int main() { cin>>l>>n>>k; for (int i=1;i<=n;i++) { cin>>a[i]; } sort(a+1,a+n+1);//排序 le=1; ri=l; while (le<=ri)//二分答案 { mid=(le+ri)/2; if (check(mid)) { ans=mid; ri=mid-1; } else { le=mid+1; } } cout<<ans; }
- 1
信息
- ID
- 908
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 4
- 标签
- 递交数
- 80
- 已通过
- 34
- 上传者