错题-路标设置

路标设置

[P3853 TJOI2007]路标设置 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll biao[200000000] = {0};
int main()
{
     
     ll l, n, k;
     cin >> l >> n >> k;
     for (ll i = 0; i < n; i++)
     {
          cin >> biao[i];
     }
     ll left = 0;
     ll right = l;
     while (left < right)
     {
          ll mid = (left + right) / 2;
          //如果没用完路标而且还能保证所有间隔都小于mid,就缩小mid再次二分
          ll m = 0;
          ll shangyici = 0;//记录上次以放置路标的位置
          ll k_temp = 0;
          for (ll i = 0; i < n - 1; i++)
          {
               if (biao[i + 1] - biao[i] > mid)
               {
                    while (biao[i + 1] - shangyici > mid)
                    {
                         k_temp++;
                         shangyici += mid;
                    }
               }
               shangyici = biao[i + 1];
          }
          if(k_temp<=k)
          {
               right = mid;
          }
          else
          {
               left = mid + 1;
          }
     }
     cout << left;
     return 0;
}
考虑两个路标之间的距离,如果超出了mid就要考虑增加路标了。
加路标时就是从一个路标开始,距离每有一个mid,就加一个路标,直到和下一个路标距离小于mid。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值