分巧克力 蓝桥杯 99

2023-11-16

题目描述

儿童节那天有 K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。

小明一共有 N 块巧克力,其中第 i 块是 Hi×Wi 的方格组成的长方形。为了公平起见,

小明需要从这N 块巧克力中切出 K 块巧克力分给小朋友们。切出的巧克力需要满足:

  1. 形状是正方形,边长是整数;

  1. 大小相同;

例如一块 6x5 的巧克力可以切出 6 块 2x2 的巧克力或者 2 块 3x3 的巧克力。

当然小朋友们都希望得到的巧克力尽可能大,你能帮小明计算出最大的边长是多少么?

输入描述

第一行包含两个整数 N,K (1≤N,K≤105)。

以下 N 行每行包含两个整数 Hi,Wi (1≤Hi,Wi≤105)。

输入保证每位小朋友至少能获得一块 1x1 的巧克力。

输出描述

输出切出的正方形巧克力最大可能的边长。

输入输出样例

示例
输入
2 10
6 5
5 6
输出
2

思路:这道题我自己觉得不好想,一开始没有往二分查找的方向想,后来看了相关视频才知道可以用二分查找

检查每块巧克力在规定大小情况下取得的最多数量的公式是 (巧克力长度 // 需要长度)* (巧克力宽度 // 需要长度 ,因此只需要依次枚举长度并进行验证即可,枚举时可以使用二分法加快查找速度,已知最极限的情况是切下来的巧克力长度为10^5,当找到长度n可以划分而长度n+1不可划分时n就是最大值,因此通过二分长度可快速求出能够找到的最大边长。

def check(d):#定义一个check函数 d是最后需要确定的正方形边长
  num =0
  for i in range(n):#计算n块巧克力一共可以切出的正方形巧克力块数量是否够小朋友人手一个
    num+=(h[i]//d)*(w[i]//d)
  if num >=k:
    return True
  else:
    return False


h = [0]*100005
w = [0]*100005
n,k=map(int,input().split())
for i in range(n):#输入每个巧克力的长和宽
  h[i],w[i]=map(int,input().split())
l,r = 1,100005
while l<r:#二分查找
  mid = (l+r)//2
  if check(mid):
    l=mid+1
  else:
    r=mid
print(l-1)#这里为什么是l-1,因为当跳出while循环时,满足条件的边长是上一个
'''
代码也可以写成
while l<=r:#二分查找
  mid = (l+r)//2
  if check(mid):
    l=mid+1
  else:
    r=mid-1
print(l-1)
'''

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分巧克力 蓝桥杯 99 的相关文章

随机推荐

  • R语言—定义数据框的列名

    1 在定义数据框时 定义列名 例如 a lt c 2 23 45 6 7 1 6 7 b lt c 4 6 1 2 5 66 10 2 df lt data frame a b 此时数据框df中的列名分别是a b 也可以如下 df lt d
  • 详解3D中obj文件格式

    原文链接 https www jianshu com p f7f3e7b6ebf5 加载3D模型的时候 遇到 obj格式的模型文件 之前有专门看过相关的资料 可惜没有总结 一下就忘了 再次用到 又去搜索了一番 发现网上很多文章讲的不是很全面
  • Char和VarChar的区别(无废话版)

    区别1 定长与变长 char表示定长 长度固定 varchar表示变长 即长度可变 char如果插入的长度小于自定义长度时候 中间用空格填充 varChar小于定义长度时 还是按照实际长度存储 插入多长就存多长 因为长度是固定的 char的
  • 浙江农林大学蓝桥杯程序设计竞赛校选拔赛 E-谁是天选之人

    众所周知下棋是一个运气游戏 不过好像也是有规律可循的 Graceful smiling cookies给它的n个棋子标序号 他决定以这些序号决定谁是天选 最开始每个棋子标号都是0 它要进行m次标序号 第i次标序号 它会将第 i X a b
  • python decimal 转换为float_在Python中将float转换为decimal类型

    我只是在玩数字游戏 我发现Numpy提供了一个名为np vectorize的函数 允许您获取一个函数并将其应用于Numpy数组 在 23 中 import numpy as np import decimal D decimal Decim
  • manjaro笔记本显卡驱动_从入门到高端!AMD Radeon RX 500系列移动显卡全解析

    前言 在处理器领域 卧薪尝胆十年之久的AMD终究还是给所有玩家带来了惊喜 2017年2月推出了ZEN构架的处理器之后 相信后面的事情大家都知道了 手忙脚乱的Intel公司在不到2年的时间内连续发布了三代酷睿产品以应对Ryzen处理器的威胁
  • mysql5.7以上的启动、停止、赋权命令

    文章目录 1 启动mysql server 2 查看初始密码 3 本地登陆mysql 4 修改本地root用户密码 5 防火墙设置 6 开启mysql的远程登录 1 启动mysql server systemctl start mysqld
  • 查看数据库字符集

    问题描述 最近发现在不同的数据库中 有时中文占用2个字节 有时占用3个字节 经过分析发现 对于varchar类型的字段 如果数据库字符集使用utf 8 则3个字节表示一个中文 如果数据库字符集使用gbk 则2个字节表示一个中文 数据库字符集
  • QMainWindow、QDialog与QWidget的区别

    一 定义 QWidget 是所有用户界面对象的基类 窗口部件是用户界面的一个原子 它从窗口系统接收鼠标 键盘和其它事件 并且在屏幕上绘制自己的表现 每一个窗口部件都是矩形 并且它们按Z轴顺序排列的 一个窗口部件可以被它的父窗口部件或者它前面
  • 关于mysql导入中文乱码问题的理解

    一般来说 mysql导入方式有三种 一种是通过mysql命令导入 一种是通过source方式导入 最后一种是直接复制sql语句导入 前两种方式一般都能导入成功 但如果这个备份文件有问题 例如本身这个文件里面在默认编码下就乱码了 那么第三种方
  • 全连接层详解

    一 什么是全连接层 转载自 https blog csdn net qq 39521554 article details 81385159 全连接层 fully connected layers FC 在整个卷积神经网络中起到 分类器 的
  • Hyperledger Fabric 应用实战(2)--网络节点设置

    1 网络节点设置 网络名称 rentnet 联盟组织 orderer排序组织 三个成员组织supervisor rentalcrop agency 通道 rentsign 账本数据库 couchdb 物理节点 组织 容器节点 supervi
  • 普通代码块,静态代码块,构造代码块,构造方法

    1 使用示例 2 静态代码块介绍 在类中通过static修饰然后大括号里面的内容就是静态代码块 见13 1实例 static 静态代码块在类被加载的时候执行 并且他只会执行一次 优先于其他所有代码块以及构造方法执行 如果有多个静态代码块则按
  • 怎么用电脑兼职赚钱,普通人可做的6个副业项目

    现在的生活中 我们总是感觉所过的日子都很紧张 虽然我们尽可能地工作和努力 但是生活成本和社会压力仍然那么大 为了弥补自己的生活经验和财务困难 很多人开始寻找一种额外的收入来源 其实这种额外的收入来源就被称之为 兼职或副业 在如今的经济环境中
  • 浅析数组名与&数组名的区别

    一 一维数组 我们借助sizeof帮助我们理解 运行结果如下 二 二维数组 同样借助sizeof来理解 运行结果如下 三 字符型数组 1 借助sizeof来理解 类似的 注意 a b数组有一些差别 造成这种差别的原因是b数组是字符串赋值 此
  • Liveness、Readiness 和 Startup Probes

    liveness apiVersion v1 kind Pod metadata labels test liveness name liveness exec spec containers name liveness image k8s
  • tomcat点击startup.bat一闪而退的解决方法

    1 点击startup bat会闪退 编辑startup bat 在最后一行加入pause 然后保存 再次运行 就可以看到闪退的原因 2 出现这个的原因是没有配置启动的环境JAVA HOME 下面配置一下JAVA HOME 右键电脑 点击属
  • mysql数据库优化--分区

    前言 公司业务数据量很大 因为是面向全国的数据统计分析 所以一天大约是大几十万数据 因为最开始设计架构没有参与 当系统出现问题 去查看的时候发现数据库两个表一个三亿多 另一个十一亿 1 优化思路 因为单表破亿执行sql现在都是问题了 del
  • sudo apt-get update 报错(Ubuntu20.04)

    1 错误 今天运行 sudo apt get update 时报错 appstreamcli 10947 GLib ERROR 09 43 36 719 g variant new parsed 11 13 invalid GVariant
  • 分巧克力 蓝桥杯 99

    题目描述 儿童节那天有 K 位小朋友到小明家做客 小明拿出了珍藏的巧克力招待小朋友们 小明一共有 N 块巧克力 其中第 i 块是 Hi Wi 的方格组成的长方形 为了公平起见 小明需要从这N 块巧克力中切出 K 块巧克力分给小朋友们 切出的