最佳植树距离

题目

给定n个坐标点位置,这些位置可以植树,有m棵树,求把m棵树都种下并且相邻树尽可能距离远时,相邻的树的距离的最小值。

输入

第一行n代表有n个坐标
第二行有n个数,用空格隔开,代表n个坐标
第三行m代表m棵树

输出

一个数,代表相邻的树的距离的最小值

思路

  1. 相邻树的距离的取值范围是【1,pos[n-1]】
  2. 题目的解就在这个范围里面,朴素的办法,从pos[n-1]一直往1的方向尝试,当有符合条件的就停止,当下的值就是解。更快的方法是用二分法来确定这个值。朴素的办法可能会超时,没试过。
  3. 如果用朴素的办法,check 函数是要求出当相邻两棵树的距离是大于等于dist时能否种得下大于等于m棵树。二分法的的check 函数也是这样设计。dist 是当下枚举到的相邻两棵树的距离。check 前先对pos 按从小到大排序会更好处理。

代码

二分法版本

import sys n,m = None, None
pos = None # lst
cnt = 0
ans = None
for line in sys.stdin:a = line.split()if cnt == 0:n = int(a[0])elif cnt == 1:pos = aelif cnt == 2:m = int(a[0])breakcnt += 1
pos = [int(e) for e in pos]
pos = sorted(pos)
# left, right = pos[0], pos[n-1] # 这不对
left, right = 1, pos[n-1]-pos[0] # left right 决定解的范围,解的范围是[1, pos[n-1]-pos[0]]
mid = (left+right) >> 1
dis = mid 
cur_idx = pos[0]
def check(dis, pos, n, m):cnt = 1cur_idx = pos[0]for i in range(1, n):if pos[i]- cur_idx >= dis:cnt += 1cur_idx = pos[i]if cnt >= m:return True else:return Falsewhile left <= right:if check(dis, pos, n, m):# dis 是可能的解ans = dis# dis 太小left = mid + 1else:# dis 不是可能的解# dis 太大right = mid -1mid = (left+right) >> 1dis = mid print(ans)

同类型题目

LeetCode 1552 两球之间的磁力

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/120849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

部署项目上线(多种方式)

一、多环境 参考文章&#xff1a;https://blog.csdn.net/weixin_41701290/article/details/120173283 本地开发&#xff1a;localhost&#xff08;127.0.0.1&#xff09; 多环境&#xff1a;指同一套项目代码在不同的阶段需要根据实际情况来调整配置并且部署到不同的机器上。…

使用内网穿透本地MariaDB数据库,并实现在公网环境下使用navicat图形化工具

公网远程连接MariaDB数据库【cpolar内网穿透】 文章目录 公网远程连接MariaDB数据库【cpolar内网穿透】1. 配置MariaDB数据库1.1 安装MariaDB数据库1.2 测试局域网内远程连接 2. 内网穿透2.1 创建隧道映射2.2 测试随机地址公网远程访问3. 配置固定TCP端口地址3.1 保留一个固定的…

Django 注册及创建订单商品

注册功能的实现 user/views from rest_framework.generics import GenericAPIView from rest_framework.views import APIViewfrom apps.user.models import User from apps.user.serializers import UserSerializer from utils import ResponseMessage from utils.jwt_auth …

P1868 饥饿的奶牛

根据题意可以知道是一个动态规划&#xff0c;看完数据范围之后可以知道是一个线性DP。 解决方法有点类似于背包问题&#xff0c;枚举背包的每一个空间。 如果把坐标轴上每个点都看成一个块儿&#xff0c;只需要按顺序求出前 i 个块儿的最大牧草堆数&#xff0c;f[i] 就是前i的…

进一步了解视频美颜SDK:美颜SDK的技术原理

美颜技术在当今的数字世界中变得越来越流行&#xff0c;尤其是在视频直播、社交媒体和视频通话应用中。用户寻求通过美颜效果增强自己的外观&#xff0c;这种需求催生了众多美颜SDK&#xff08;软件开发工具包&#xff09;的出现。这些SDK使开发者能够轻松地将美颜功能集成到他…

5.tessent命令笔记

1. report_gates 显示指定gates的网表信息和仿真结果&#xff0c;以及特定的user-defined ATPG功能的仿真结果&#xff0c;该命令在使用之前要求flattened netlist。 2.set_gate_report 指定report_gates命令展示的信息。 3.report_scan_volume 展示被pattern set使用的sc…

注意力机制、Transformer模型、生成式模型、目标检测算法、图神经网络、强化学习、深度学习模型可解释性与可视化方法等详解

采用“理论讲解案例实战动手实操讨论互动”相结合的方式&#xff0c;抽丝剥茧、深入浅出讲解注意力机制、Transformer模型&#xff08;BERT、GPT-1/2/3/3.5/4、DETR、ViT、Swin Transformer等&#xff09;、生成式模型&#xff08;变分自编码器VAE、生成式对抗网络GAN、扩散模型…

【代码思路】2023mathorcup 大数据数学建模B题 电商零售商家需求预测及库存优化问题

各位同学们好&#xff0c;我们之前已经发布了第一问的思路视频&#xff0c;然后我们现在会详细的进行代码和结果的一个讲解&#xff0c;然后同时我们之后还会录制其他小问更详细的思路以及代码的手把手教学。 大家我们先看一下代码这一部分&#xff0c;我们采用的软件是Jupyte…

通过流量安全分析发现主机异常

主机异常分析在计算机系统中具有重要意义。以下是主机异常分析的几个关键点&#xff1a; 1、检测安全威胁&#xff1a;主机是计算机系统的核心组件&#xff0c;通过对主机异常进行分析&#xff0c;可以快速检测到潜在的安全威胁&#xff0c;如恶意软件、病毒感染、黑客入侵等。…

js中的Formdata数据结构

这里写目录标题 一、基本概念二、常用方法1.append(name, value)、set(name, value)2.get()、getAll()3.has(name)4.delete(name)5.keys(),values(),entries() 三、其他细节1.for of遍历2.转为对象3.结合 URLSearchParams 转为queryString 一、基本概念 FormData 提供了一种表…

p5.js画布操作实战:创建,绑定指定元素,动态调整大小,隐藏滚动条,删除画布

文章简介 之前在 《p5.js 光速入门》 里粗略讲过一下如何使用 p5.js 创建画布。 这次要介绍几个 p5.js 提供的画布相关的方法。 创建画布时的相关配置。让画布绑定指定元素。重置画布大小。删除画布。 学习本文前你需要具备一点 p5.js 的知识&#xff0c;想了解的请查看 《p…

【Java 进阶篇】Java Request 继承体系详解

在Java编程中&#xff0c;Request&#xff08;请求&#xff09;是一个常见的概念&#xff0c;特别是在Web开发中。Request通常用于获取来自客户端的信息&#xff0c;以便服务器能够根据客户端的需求提供相应的响应。在Java中&#xff0c;Request通常涉及到一系列类和接口&#…

CAS 机制的实现原理分析

在 synchronized 中很多地方都用到了CAS机制&#xff0c;它的叫法有很多&#xff0c;比如CompareAndSwap、CompareAndExchange、CompareAndSet&#xff0c;它是一个能够进行比较和替换的方法&#xff0c;这个方法能够在多线程环境下保证对一个共享变量进行修改时的原子性不变。…

CentOS 编译安装TinyXml2

安装 TinyXml2 Git 源码下载地址:https://github.com/leethomason/tinyxml2 步骤1&#xff1a;首先&#xff0c;你需要下载tinyxml2的源代码。你可以从Github或者源代码官方网站下载。并上传至/usr/local/source_code/ 步骤2&#xff1a;下载完成后&#xff0c;需要将源代码解…

docker基础镜像定制

docker基础镜像定制 1 简言2.准备软件源文件sources.list3.制作基础镜像3.1 编写Dockerfile命令3.2 制作基础镜像k8sbase1.03.3 测试基础镜像1 简言 官方基础镜像一般自带的linux命令是比较少,tcpdump、telnet登等命令是没有的,这时,定制一套适合自己的基础镜像是必要的,在…

k8s部署kafka,并使用zookeeper做注册中心

kafka在3.x版本后增加KRaft作为自己的注册中心&#xff0c;可以不依赖外部的zk&#xff1b;这里上一篇已经部署好了zk&#xff0c;kafka依然使用zk作为注册中心。 这里使用kafka是为集成zipkin收发微服务接口链路日志数据&#xff0c;只需要部署1个实列即可够用。 编写脚本yam…

Leetcode链表问题汇总

目录 [2. 两数相加](https://leetcode.cn/problems/add-two-numbers/)[206. 反转链表](https://leetcode.cn/problems/reverse-linked-list/)[92. 反转链表 II](https://leetcode.cn/problems/reverse-linked-list-ii/)[19. 删除链表的倒数第 N 个结点](https://leetcode.cn/pr…

『力扣刷题本』:合并两个有序链表(递归解法)

一、题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输出&#x…

Python---练习:使用for循环实现用户名+密码认证

案例&#xff1a; 用for循环实现用户登录 ① 输入用户名和密码 ② 判断用户名和密码是否正确&#xff08;usernamelaowang&#xff0c;passwordlw123&#xff09; ③ 登录仅有三次机会&#xff0c;超过3次会报错 思考&#xff1a; 用户登陆情况有3种: ① 用户名错误(此时…

java面试--线程总结

Java中有几种方式来创建线程执行任务&#xff0c;分别是什么&#xff1f; 1、继承Thread类 public class MyThread extends Thread{public static void main(String[] args) {MyThread myThread new MyThread();myThread.start();}Overridepublic void run() {System.out.pr…