首页 > 编程语言 >【二分法】分巧克力问题/python

【二分法】分巧克力问题/python

时间:2024-03-14 21:58:53浏览次数:28  
标签:满足条件 巧克力 python mid 二分法 high low check

1.看出是用二分法:

最大值最小化,最小值最大化,满足条件的最值,用二分法做。

2.确定low,high,确定check的条件

3.注意:

  是当low<high的时候进行循环,当相等或大于的时候输出,while的条件不能写错。

  本题是在区间里面找满足条件的最大值,所以,在算mid的时候面对取整的问题让它向大的值取。check过mid是满足条件后,low=mid,这样low是满足条件的,下一个找的区间里面一定有满足条件的值。如果mid不满足条件,high=mid-1,区间里没有这个不满足条件的数,不会影响结果。如果low=mid+1,那么low可能不满足条件,high也可能不满足条件,有可能就在一个没有答案的区间里找。

  同理,如果是找满足条件的最小值,mid就要往小的取整,保证high满足条件,check(mid)之后,若满足,high=mid,不满足,low=mid-1。

#满足条件的最大边长,用二分法
n,k=map(int,input().split())
h=[]
w=[]
for _ in range(n):
          wi,hi=map(int,input().split())
          h.append(hi)
          w.append(wi)

def check(x):#如果x够分了说明满足条件
          cnt=0
          for i in range(n):
                    cnt+=(h[i]//x)*(w[i]//x)
          return cnt>=k

low=1
high=max(max(h),max(w))
while low<high:
          mid=(low+high+ 1)//2# 使用+1确保mid偏向high方向,避免死循环
          if check(mid):#如果mid满足条件,就去找找有没有更大的数满足条件,所以low前移
                    low=mid#low=mid+1是错的
          else:
                    high=mid-1

# 最后low=high输出哪个都一样
print(high)

标签:满足条件,巧克力,python,mid,二分法,high,low,check
From: https://blog.csdn.net/weixin_73803220/article/details/136722144

相关文章

  • python post测试
    pythonpost测试 importrequests#设置请求的URLurl='http://example.com/api/post'#准备要发送的数据,这里假设有一个中文字段'name'data={'name':'张三',#中文名字'age':30}#发送POST请求,指定headers中的Content-Type为applica......
  • Python学习随记(二)
    Python学习随记(二)print函数#hello,aworld为print函数所输出测内容,sep='|'中表示使用|替换为输出内容间原本的空格,#end=''使用空格替换print函数结尾原本的换行符print("hello","aworld",sep='|',end='')#检测多行注释是否为字符串print(&......
  • python下载win32gui的库失败解决教程
    1、进入这个网站https://www.lfd.uci.edu/~gohlke/pythonlibs/界面如下:因为这些安装包都是按照字母顺序排序的,所以就向下翻到pywin32的位置就行;选择跟自己的python版本相对应的这个库的版本,点击即可下载;等待下载完成:2、进入到pycharm软件里面,运用命令实现库的安装python-......
  • 初识python
    师从黑马程序员字面量python中常用的6种数据的类型通过三对引号进行注释,例: """hellowrold"""数据类型使用type查看数据类型name="黑马"name_type=type(name)print(name_type)类型转化 运算符print("5/2=",5/2)print("5//2=",5//2)print("2......
  • 有手就会Python自定义模块使用
    1.自定义模块自定义模块一般是在项目中根据自己的需求进行的封装项目中自定义了额一个模块,module.pyname="张三"age=23weight=160height=187deftest():print("测试的方法")defdemo():print("天使的眼泪")deffn():print("老鼠爱大米")2.......
  • Python使用RocketMQ(消息队列)
    消息队列在日常开发中比较常用的开发中间件,每家大厂一般都会具有自己的消息队列服务器。本文主要讲述Python中如何使用RocketMQ的相关SDK。希望大家在阅读本文前可以先了解一下RocketMQ的基本知识。使用 pipinstallrocketmq-ihttps://pypi.tuna.tsinghua.edu.cn/sim......
  • Python入门新手第三课:while
           今天我们来学习Python的while指令。while在Python中充当着类似中文里“如果”的角色,比如这个代码:whileTrue:       这个代码的意思是如果正确,则运行后面的代码。同样,我们还可以编写以下代码:whileFalse:       “whileFalse:”这个代码......
  • Python中的惩罚分析:理论与实践指南
    目录写在开头1.理论基础1.1优化问题与约束条件简介1.2什么是惩罚分析1.3惩罚分析的应用场景1.4惩罚方法的类型2.惩罚分析在Python中的实现2.1实现代码示例2.2未加惩罚的模型2.3加惩罚的模型(L1和L2正则化)2.4选择合适的惩罚方法与调整强度2.5......
  • 【Python】-闲聊:如何系统的自学Ptyhon
    如何系统地自学Python学习Python需要有一个系统的计划和策略,这样才能有效地掌握这门语言。下面是一个自学Python的指南,包括方法、实际例子和建议,适合新人小白,老手请绕过。一、确定学习目标在开始学习之前,首先要明确你的学习目标。Python可以用于数据分析、机器学习、Web......
  • Python自学☞序列和索引的相关操作
    一、基本概念1、概念序列是一个用于存储多个值的连续空间,每个值都对应一个整数的编号,称为索引2、切片的语法结构注:切片可以访问序列一定范围内的元素序列[start:end:step]    start-->切片的开始索引(包含)    end-->切片的结束索引(不包含)  step-->步长(默......