路标设置
时间:2021-08-14
本文章向大家介绍路标设置,主要包括路标设置使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Problem
\(B\)市和\(T\)市之间有一条长长的高速公路,这条公路的某些地方设有路标,但是大家都感觉路标设得太少了,相邻两个路标之间往往隔着相当长的一段距离。为了便于研究这个问题,我们把公路上相邻路标的最大距离定义为该公路的“空旷指数”。现在政府决定在公路上增设一些路标,使得公路的“空旷指数”最小。他们请求你设计一个程序计算能达到的最小值是多少。
请注意,公路的起点和终点保证已设有路标,公路的长度为整数,并且原有路标和新设路标都必须距起点整数个单位距离。
Solution
像这样求最小值最大是多少的题大部分都是二分,这道题也给我们很强的提示这就是二分,那就不用说了,直接二分。
考虑check
,明显可以把问题转化成空旷指数为\(k\)时要多少路标,然后看是不是小于等于可增加的路标数。
这就很简单了,如果两个路标之间大于等于了\(k\)就要修路标,注意两个路标尽可能离得远才是最优解,所以直接隔\(k\),说白了就是装\((a_i-a_{i-1})/k\)个路标,注意一下当\((a_i-a_{i-1})\%k=1\)时多算了一个路标,所以我们在一开始计算使就直接\(-1\)就可以了。
时间复杂度为\(O(n\log n)\)。
Code
#include<bits/stdc++.h>
using namespace std;
int a[100007];
int n,m,k;
int check(int x)
{
int sum=0;
for(int i=2;i<=n;i++)
{
if(x<=a[i]-a[i-1])
sum+=(a[i]-a[i-1]-1)/x;
}
if(sum<=k)
return true;
return false;
}
int main()
{
scanf("%d%d%d",&m,&n,&k);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
int l=1,r=m,ans;
while(l<=r)
{
int mid=(l+r)/2;
if(check(mid)==true)
{
r=mid-1;//这里可能写的与别人不同,但实际上意思是一样的。
ans=mid;
}
else
l=mid+1;
}
printf("%d",ans);
return 0;
}
原文地址:https://www.cnblogs.com/qinchenhao/p/15140593.html
- Kafka剖析系列之高可用(下)
- 11 个简单的 Java 性能调优技巧
- NativeScript工作原理
- 如何合并Git 代码库中牛人的代码到自己的库
- Kafka剖析系列之Consumer解析
- android之View绘制
- 高性能JavaScript-JS脚本加载与执行对性能的影响
- CSS3伪类和伪元素的特性和区别
- Kafka剖析系列之Benchmark
- 初探React与D3的结合-或许是visualization的新突破?
- Redis 在Centos Linux 上的启动脚本
- 理解JavaScript的临时包装对象
- JavaScript实现私有属性
- 使用LRU算法缓存图片,android 3.0
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- codeforces 1077F1(dp)
- Servlet基础入门学习1
- Lombok,你的开发效率神器!
- codeforces 1272E(反向建边+多源bfs)
- Tomcat在Java开发中的使用笔记
- codeforces 1423K(数学+差分数组预处理)
- 基于Quartz的定时任务及crond表达式入门学习
- Flutter 渲染引擎详解 - iOS GL 篇
- Flutter 渲染引擎详解 - iOS Metal 篇
- Solr 单节点的启动与配置
- Listener与Filter监听器基础使用
- Flutter 1.22 正式发布
- Solr core创建后的数据导入
- Jsp开发模式及MVC模型的使用
- 【Flutter Widgets大全】电子书开源