P3858 路标设置

题目网址:https://www.luogu.com.cn/problem/P3853

题目描述:

我们把公路上相邻路标的最大距离定义为该公路的“空旷指数”。
给出增设的路标数,求最小的空旷指数。

输入格式:

第1行包括三个数L、N、K,分别表示公路的长度,原有路标的数量,以及最多可增设的路标数量。
第2行包括递增排列的N个整数,分别表示原有的N个路标的位置。路标的位置用距起点的距离表示,且一定位于区间[0,L]内。

输出格式

输出1行,包含一个整数,表示增设路标后能达到的最小“空旷指数”值。

思路分析:

很明显,本题可使用二分法查找。查找的区间应为[1,max]。
max:设n个路标把公路分成n+1段,max为最大子段的长度。
即空旷指数最小为零,最大为max。当空旷指数为max时不需要新添路标。
首先需要一个新的check函数来检查当前空旷指数可不可行。
其次写二分查找的函数,就非常简单了。

详见代码如下:

#include<bits/stdc++.h>
using namespace std;
#define M 15000000
long long int l, r, mid;
int L, n, k;
int a[M];
bool check(long long int ans)
{
int last = 0, cnt = 0;
for(int i = 2; i <= n; i++) {
while (a[i] - last > ans) {
cnt++;
last += ans;
}
last = a[i];
}
return cnt <= k;
}

int main() {
scanf("%d%d%d", &L, &n, &k);
a[0] = 0;
for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
a[++n] = L;
r = 0;
for(int i = 1;i <= n+1;i++)
{
if(r < a[i]-a[i-1])
r = a[i] - a[i-1];
}
l = 1;
while(l < r) {
mid = l + (r - l) /2;
if(check(mid)) r = mid;
else l = mid + 1;
}
printf("%lld", l);
return 0;
}

总结与体会:

二分查找可以通过多种途径实现,不能够仅仅局限于运用递归。在遇到问题的时候要静下心思考,或者适当听取别人的建议也是一种不错的方法。

洛谷 P3858 路标设置相关推荐

  1. 洛谷P1364 医院设置

    LITTLESUN的第一道图论,撒花~~ 题目链接 这道题是Floyd的板子题 注意对于矩阵图的初始值赋值要全部赋值成最大值 十六进制的最大值表示方式是0x3f3f3f3f memset(G,0x3f ...

  2. 洛谷P3853 [TJOI2007]路标设置

    P3853 [TJOI2007]路标设置 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 这道题与 洛谷P2678 [NOIP2015 提高组] 跳石头 和 洛谷P1182 数列分段 ...

  3. 二分答案——路标设置(洛谷 P3853)

    题目选自洛谷P3853 这题不算很难,类似于跳石子,典型的二分答案: 先简单说一下思路: 我们把公路上相邻路标的最大距离定义为该公路的"空旷指数" 求增设路标后能达到的最小&quo ...

  4. 洛谷 P3853 [TJOI2007]路标设置

    路标设置 二分枚举"空旷指数", 做法与跳石头类似. #include <iostream> #include <cstdio> #include < ...

  5. 二叉树——医院设置(洛谷 P1364)

    题目选自洛谷P1364 从指定结点开始,使用DFS,对于某个结点来说,搜索的深度就是源点到这个结点的距离,单点贡献(该点所有居民到医院的距离之和)就是源点到这个结点的距离乘上该点的居民数量:然后加上自 ...

  6. Luogu P3853 路标设置

    这大概是我第一次发难题的题解吧-- 这道题我整了好几天,才过. 题面 &\&& 题解 如果单纯地思考怎么拿部分分,那这个题并不难,暴力模拟一遍就行了,小样例能过. 如果你要拿, ...

  7. 洛谷 P3384 【模板】树链剖分-树链剖分(点权)(路径节点更新、路径求和、子树节点更新、子树求和)模板-备注结合一下以前写的题目,懒得写很详细的注释...

    P3384 [模板]树链剖分 题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节 ...

  8. 洛谷——P1056 排座椅

    题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳. 同 ...

  9. 洛谷P1246C语言,codevs1246 丑数

    题目描述 Description 对于一给定的素数集合 S = {p1, p2, ..., pK}, 来考虑那些质因数全部属于S 的数的集合.这个集合包括,p1, p1p2, p1p1, 和 p1p2 ...

最新文章

  1. 关于数据中台的深度思考与总结(超级干货)
  2. 在Linux Ubuntu 18.04.x上安装和配置ActiveMQ-Artemis
  3. java.util.DualPivotQuickSort的实现
  4. 轻量级运维工具-pssh,pscp,prsync,pslurp,pnuke
  5. ppt字体颜色如何修改
  6. 写代码常用英文及缩写
  7. mybatis源码详解
  8. 明道云实现产品BOM清单的快速搭建
  9. 论文阅读笔记:Sequential Matching Network: A New Architecture for Multi-turn Response Selection in Retrieva
  10. 修改U盘、移动硬盘时提示目标文件夹访问被拒绝的问题解决思路
  11. 联想E460关闭触摸板
  12. android6.0连接WIFI后显示“已连接,但无法访问互联网”实际可以上网
  13. 如何拆分PDF文件,PDF如何拆分页面
  14. YARN——NM重启后的任务恢复
  15. 离散数学及其应用复盘 | 第3版第4章——谓词逻辑思维导图梳理(复习专用)
  16. php 极光短信发送 api
  17. 23-高级路由:BGP配置(MPLS-解决路由黑洞)
  18. 如何将win10系统安装到U盘?
  19. ViT强势应用 | V2X基于ViT提出了一个具有V2X通信的强大协作感知框架
  20. c 语言获取系统时间并打印机,C# 获取打印机当前状态的方法

热门文章

  1. 中国大学MOOC货币金融学试题及答案
  2. 终于可以写shui题了~
  3. Ubuntu无法重启:教你用u盘系统修复ubuntu
  4. (二)理解word2vec:实践篇
  5. 南外计算机课,南外河西初中召开仿生机器人创客空间项目建设方案答辩论证会...
  6. 锁定计算机屏幕的快捷键是什么,计算机屏幕锁定的快捷键是什么? -计算机
  7. 解决ie11下antd-vue input的clear点击无效
  8. python画rgb渐变色_请问如何在matplotlib中画出自定义渐变色?
  9. java/php/net/python线上歌唱比赛报名系统设计
  10. openwrt 自启动实现4G路由器功能总结