分巧克力(蓝桥杯)

文章目录

  • 分巧克力
    • 题目描述
    • 二分算法

分巧克力

题目描述

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

  1. 形状是正方形,边长是整数
  2. 大小相同
    例如一块 6×5 的巧克力可以切出 6块 2×2 的巧克力或者 2 块 3×3的巧克力。
    当然小朋友们都希望得到的巧克力尽可能大,你能帮小明计算出最大的边长是多少么?

输入格式
第一行包含两个整数 N 和 K。
以下 N行每行包含两个整数 Hi和 Wi
输入保证每位小朋友至少能获得一块 1×1 的巧克力。

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

数据范围
1≤N,K≤105,
1≤Hi,Wi≤105
输入样例:

2 10
6 5
5 6

输出样例:

2

二分算法

如果看不懂题目要求,画图就可以理解了,如下图:
在这里插入图片描述
如果使用二分算法,那么切割的巧克力边长依题意最小为1,最大为最大巧克力的最小边,因此l=1,r=最大巧克力的最小边,因为要求出输出切出的正方形巧克力最大可能的边长,所以使用二分查找中的右查找得到最大值。

如何判断怎么从检查是否能从所有巧克力块中切出至少k块边长为z的正方形巧克力?
从上图可以看出,切割的块数=h/midw/mid。例如56的巧克力,能切割出的块数=5/26/2=23=6。

ps:在求r时我刚开始做的时候求的是所有巧克力的最小边,但这样子是不对的,因为当总巧克力足够多时,例如100块,里面的数据可能会有23的小巧克力,甚至11的小巧克力,这样的数据可以舍去,并不影响求输出切出的正方形巧克力,所以r的值应该为最大巧克力的最小边(所有巧克力的最小边长)

#include<bits/stdc++.h> // 包含C++标准库的所有头文件
using namespace std;

// 声明全局变量
int n, k, h[100010], w[100010]; // n为巧克力数量, k为小朋友数量, h和w分别存储每块巧克力的高和宽

// 检查是否能从所有巧克力块中切出至少k块边长为z的正方形巧克力
bool check(int z) {
    int count = 0; // 用于计算能切出的正方形巧克力的个数
    for (int i = 0; i < n; i++) {
        count += (h[i] / z) * (w[i] / z); // 计算第i块巧克力能切出多少个边长为z的正方形
        if (count >= k) return true; // 如果已经能切出至少k块,则返回true
    }
    return false; // 如果不能切出至少k块,则返回false
}

int main() {
    cin >> n >> k; // 输入巧克力的数量和小朋友的数量
    int i;
    int max_size = 0; // 存储所有巧克力中最长的边
    for (i = 0; i < n; i++) {
        cin >> h[i] >> w[i]; // 输入每块巧克力的高和宽
        max_size = max(max_size, min(h[i], w[i])); //最大巧克力的最小边
    }
    //二分查找——右查找:找最大值
    int l = 1, r = max_size; // 设置二分搜索的范围
    while (l < r) { // 当左边界小于右边界时,执行循环
        int mid = (l + r + 1) >> 1; // 计算中间值,向上取整
        if (check(mid)) l = mid; // 如果能切出足够多的巧克力,则向右收缩范围
        else r = mid - 1; // 如果不能切出足够多的巧克力,则向左收缩范围
    }
    cout << r; // 输出最大可能的边长
    return 0; // 程序结束
}

这段代码中,check 函数通过试验不同的 z 值来检查是否可以满足题目条件。二分搜索用于优化查找过程,它逐渐缩小查找边长 z 的范围,直到找到最大可能的边长。l 是查找范围的下界,r 是上界,mid 是每次迭代中的中间值。最终,二分搜索结束时的 r 值即为结果。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

sawForceDimensionSDK安装,sigma7+ros

force dimension的sdk中没有关于ros&#xff0c;借助开源的sawForceDimensionSDK实现对于数据的封装和可视化&#xff0c;方便后续使用 链接&#xff1a; GitHub - jhu-saw/sawForceDimensionSDK 具体步骤&#xff1a; 安装qt和ros&#xff0c;官网下载Force Dimension SDK …

微信小程序 uniapp+vue实习助学岗位系统springboot/php/python/nodejs

&#xff08;一&#xff09;研究目标&#xff1a; 对于本微信小程序实习系统的设计来讲&#xff0c;主要是采用了java语言和mysql数据库来完成对系统的设计&#xff0c;根据某高校的实习系统&#xff0c;提出解决问题的一个可行性方法&#xff0c;可以在手机端就能完成我们的工…

对话式人工智能:改变电子学习的格局

革命性教育体验&#xff1a;对话式AI导师如何改变学习方式 对话式人工智能和电子学习的融合不仅仅是技术进步&#xff0c;更是技术进步。 这是教育范式的一场革命。 这种整合正在重塑我们的学习方式&#xff0c;打破传统障碍&#xff0c;创造更具互动性、个性化且易于访问的学习…

科普SCADA系统

什么是SCADA系统&#xff1f; 在20世纪中期&#xff0c;工业设施依靠人员对设备进行物理控制和监控。然而&#xff0c;随着行业规模的扩大&#xff0c;设备控制的创新出现了。20世纪70年代初&#xff0c;监控与数据采集&#xff08;SCADA&#xff09;系统被发明。该系统允许自…

探索IP地址定位工具:解读IP数据云的功能与优势

在当今数字化时代&#xff0c;IP地址定位工具成为了许多领域中不可或缺的技术支持&#xff0c;为网络安全、地理定位服务和个性化推荐等提供了重要数据支持。其中&#xff0c;IP数据云作为一种领先的IP地址定位工具&#xff0c;具有一系列功能和优势&#xff0c;本文将对其进行…

Jenkins设置root权限(13)

1.将 Jenkins 账号加入到 root 组中。 gpasswd -a jenkins root2.修改/etc/sysconfig/jenkins文件&#xff0c;添加如下配置。 JENKINS_USER"root" JENKINS_GROUP"root"3.重启 Jenkins service Jenkins restart4.验证 groups jenkins jenkins : jenkin…

Chapter 8 - 19. Congestion Management in TCP Storage Networks

Queue Depth Monitoring and Microburst Detection Queue depth monitoring and microburst detection capture the events that may cause congestion at a lower granularity but are unnoticed by other means due to long polling intervals. 队列深度监控和微爆检测可捕捉…

【Unity】在Unity中导出WebGL并读取Excel数据的实现方法

在游戏开发中&#xff0c;数据的处理和导出是至关重要的环节之一。Unity作为一款强大的游戏开发引擎&#xff0c;提供了丰富的工具和功能来处理和导出数据&#xff0c;包括将游戏导出为WebGL应用&#xff0c;并读取外部数据文件&#xff0c;比如Excel表格。本文将介绍如何在Uni…

Kubernetes工作负载重点总结

文章目录 1、容器2、Pod3、工作负载4、Deployment5、StatefulSet5、DaemonSet6、Job7、CronJob 1、容器 容器&#xff1a; 容器是容器镜像的运行态&#xff0c;通过基于标准的容器运行时运行&#xff0c;将应用程序从底层的主机设施中解耦。 容器镜像&#xff1a; 容器镜像是一…

传感器为智能化基础,L3车规落地打开激光雷达新空间(上)

1 智能化重新定义汽车&#xff0c;开启“新赛道” 1.1 新技术重新定义汽车&#xff0c;开启智能汽车时代 1.2 从整车看来&#xff0c;智能化产品带来汽车定位差异  颠覆性体验感打通消费者消费升级感受空间&#xff0c;用户对智能化功能需求度变高。未来车只分为“能自动驾驶…

SpringBoot源码解读与原理分析(三十三)SpringBoot整合JDBC(二)声明式事务的生效原理和控制流程

文章目录 前言10.3 声明式事务的生效原理10.3.1 TransactionAutoConfiguration10.3.2 TransactionManagementConfigurationSelector10.3.3 AutoProxyRegistrar10.3.4 InfrastructureAdvisorAutoProxyCreator10.3.5 ProxyTransactionManagementConfiguration10.3.5.1 Transactio…

第七十天 APP攻防-微信小程序解包反编译数据抓包APK信息资源提取

第70天 APP攻防-微信小程序&解包反编译&数据抓包&APK信息资源提取 知识点&#xff1a; 0、APK信息资源提取 1、微信小程序致据抓包 2、做信小程序解包反编译 1、信息收集应用8资产提取&权限等 2、漏润发现-反编泽&脱壳&代码审计 3、安全评估组件8散密…

首个基于地面纹理的单目SLAM,复杂光照环境中也能精准定位

论文题目&#xff1a; Monocular Simultaneous Localization and Mapping using Ground Textures 论文作者&#xff1a; Kyle M. Hart&#xff0c; Brendan Englot, Ryan P. O’Shea, John D. Kelly, David Martinez 导读&#xff1a; 本文是发布在ICRA 2023的论文&#xff0c…

【EFK】基于K8S构建EFK+logstash+kafka日志平台

基于K8S构建EFKlogstashkafka日志平台 一、常见日志收集方案1.1、EFK1.2、ELK Stack1.3、ELK filbeat1.4、其他方案 二、EFK组件介绍2.1、Elasticsearch组件2.2、Filebeat组件【1】 Filebeat和beat关系【2】Filebeat是什么【3】Filebeat工作原理【4】传输方案 2.3、Logstash组件…

Carla自动驾驶仿真八:两种查找CARLA地图坐标点的方法

文章目录 前言一、通过Spectator获取坐标二、通过道路ID获取坐标总结 前言 CARLA没有直接的方法给使用者查找地图坐标点来生成车辆&#xff0c;这里推荐两种实用的方法在特定的地方生成车辆。 一、通过Spectator获取坐标 1、Spectator&#xff08;观察者&#xff09;&#xf…

实战Kafka的部署

目录 一、环境准备 二、安装配置jdk8 &#xff08;1&#xff09;Kafka、Zookeeper&#xff08;简称&#xff1a;ZK&#xff09;运行依赖jdk8 三、安装配置ZK &#xff08;1&#xff09;安装 &#xff08;2&#xff09;配置 四、配置Kafka &#xff08;1&#xff09;配置…

SpringBoot整合rabbitmq-扇形交换机队列(三)

说明&#xff1a;本文章主要是Fanout 扇形交换机的使用&#xff0c;它路由键的概念&#xff0c;绑定了页无用&#xff0c;这个交换机在接收到消息后&#xff0c;会直接转发到绑定到它上面的所有队列。 大白话&#xff1a;广播模式&#xff0c;交换机会把消息发给绑定它的所有队…

day06_菜单管理(查询菜单,添加菜单,添加子菜单,修改菜单,删除菜单,角色分配菜单,查询菜单,保存菜单,动态菜单)

文章目录 1 菜单管理1.1 表结构介绍1.2 查询菜单1.2.1 需求说明1.2.2 页面制作1.2.3 后端接口SysMenuSysMenuControllerSysMenuServiceMenuHelperSysMenuMapperSysMenuMapper.xml 1.2.4 前端对接sysMenu.jssysMenu.vue 1.3 添加菜单1.3.1 需求说明1.3.3 页面制作1.3.3 后端接口…

类加载的过程以及双亲委派模型

类加载&#xff0c;指的是java进程运行的时候&#xff0c;需要把.class文件从硬盘&#xff0c;读取到内存&#xff0c;并进行一系列的校验解析的过程。&#xff08;.class文件 > 类对象&#xff0c;硬盘 > 内存&#xff09; 类加载的过程&#xff0c;类加载的过程其实是在…

探索Sora:AI视频模型的创新与未来展望

✍️作者简介&#xff1a;小北编程&#xff08;专注于HarmonyOS、Android、Java、Web、TCP/IP等技术方向&#xff09; &#x1f433;博客主页&#xff1a; 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN &#x1f514;如果文章对您些帮助请&#x1f449;关…