分巧克力(蓝桥杯,二分,acwing)

题目描述:

儿童节那天有 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≤1e5,
1≤Hi,Wi≤1e5

输入样例:

2 10
6 5
5 6

输出样例:

2

分析步骤:

  第一:理清思路,:

  1. 我们拿到这个题目,我们先考虑怎么满足第一个条件怎么保证他是正方形呢?正方形得保证相邻的两条边一定得是相等的,我们可以拿长和宽去除以一个数得到的数相乘就代表着这是我们最多可以求出的正方形数。例如一个长和宽分别是10和20的纸板,我们要求出它最多可以有多少个2x2的纸板。只需要拿(长去除以2的商)乘上(宽去除以2的商)-->5x10=50个这就是我们推出的数学公式,这是本题的第一个特点。

  2. 题目中要我们求的是最值,那么就代表着我们可以找到一个点,在这个点的左边是符合条件的,在这个点的右边不符合条件,这就是最值的特点。我们还可以发现这个序列一定是递增的,从小到大看看那个值是符合条件的。所以即是单调又是最值,那么就符合我们的二分的算法条件,我们就使用二分算法,这是本题的第二个特点。

  第二:书写主函数,构建整体框架:

  1. 我们可以用pair和这个结构,将长和宽放到一个点的位置上。

  2. 我们定义左边界为1,右边界为1e5。我们的左右边界一定是极端情况的答案,只有把极端情况也包含进来了的话,那么才不会漏掉答案。l为1是因为长和宽最小是1,所以当真的为1时而且只有一个人的时候我们就只能输出1个1x1的巧克力了;r为1e5是因为长和宽最大是1e5,所以当真的为1e5时且只有一个人的时候最大就是1e5。这就是两个极端情况。

  3. 进入我们的while循环只要l<r的话就一直循环。求出我们的mid,假设mid这个长度的巧克力符合题目中的两个条件的话,那么就代表着比mid更小长度的巧克力一定更符合条件,因为长度更小意味着数量更多,一定可以满足人数的要求和正方形的要求。mid可能是符合条件的最大值(再大一点就会错),所以直接将mid赋予l,区间缩小一点。

  4. 设mid这个长度的巧克力不符合题目中的两个条件的话,那么就代表着比mid更大长度的巧克力一定更不符合条件,因为长度更大意味着数量更少,一定可以更不满足人数的要求和正方形的要求。所以就将mid - 1赋予r,因为我们检查过了mid不行所以要将mid-1,区间缩小一点。

  5. 最终退出循环,就代表着我们将所有的可能都过了一遍,直接输出r。

int main()
{cin>>n>>m;for(int i = 0 ; i < n ; i ++){cin>>q[i].x>>q[i].y;}int l = 1 , r = 1e5;while(l<r){int mid = (l + r + 1 )/2;if(check(mid)) l = mid ;else r = mid - 1;}cout<<r<<endl;return 0;
}

  第三:书写check函数:

  1. 定义res等于0,让他去记录我们可以产生多少个正方型的巧克力。

  2. 我们用for循环去遍历每一个长和宽,运用我们推导出的公式,再将其加在一起如果数量可以超过m的话,就代表这个mid的长度是符合条件的就返回true。否则如果整个for循环结束数量都没有m的话就代表这个mid长度不可以就返回false。

bool check(int mid){LL res = 0;for(int i = 0 ; i < n ; i++){res += (LL)(q[i].x/mid)*(q[i].y/mid);if(res >= m) return true;}return false;
}

代码:

#include <iostream>
#include <cstring>
#include <algorithm>
#define x first
#define y secondusing namespace std;
typedef long long LL;
typedef pair<int, int> PII;
const int N = 1e5+10;
PII q[N];
int n , m ;bool check(int mid){LL res = 0;for(int i = 0 ; i < n ; i++){res += (LL)(q[i].x/mid)*(q[i].y/mid);if(res >= m) return true;}return false;
}int main()
{cin>>n>>m;for(int i = 0 ; i < n ; i ++){cin>>q[i].x>>q[i].y;}int l = 1 , r = 1e5;while(l<r){int mid = (l + r + 1 )/2;if(check(mid)) l = mid ;else r = mid - 1;}cout<<r<<endl;return 0;
}

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

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

相关文章

企业如何做好数字化?

企业进行数字化转型是一个复杂且系统性的过程&#xff0c;涉及战略规划、技术应用、组织变革、文化建设等多个方面。以下步骤和建议可以帮助企业做好数字化转型&#xff1a; 1、明确转型愿景和目标&#xff1a;确定企业的数字化愿景&#xff0c;明确转型的长期目标和短期里程碑…

全面备份:自动化MySQL服务器上所有数据库的备份策略

这篇博客提供了一个批量备份MySQL数据库的Shell脚本&#xff0c;并包含了详细的注释和使用说明。这个脚本能够自动化地备份服务器上所有的数据库&#xff0c;排除系统数据库&#xff0c;并在备份完成后压缩和清理旧文件。 脚本内容及注释 下面是脚本的内容&#xff0c;其中包…

烤羊肉串引来的思考--命令模式

1.1 吃羊肉串&#xff01; 烧烤摊旁边等着拿肉串的人七嘴八舌地叫开了。场面有些混乱&#xff0c;由于人实在太多&#xff0c;烤羊肉串的老板已经分不清谁是谁&#xff0c;造成分发错误&#xff0c;收钱错误&#xff0c;烤肉质量不过关等。 外面打游击烤羊肉串和这种开门店做烤…

基于Springboot4S店车辆管理系统

采用技术 基于Springboot4S店车辆管理系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 管理员功能 首页 销售员管理 维修员管理 客户管理 供应…

服务器挖矿病毒查杀排查手册

生产紧急问题可私信博主 背景 好几个朋友都找过我说自己的服务或者网站异常的慢&#xff0c;甚至于无法访问 分析 拿到服务器权限登录服务器&#xff0c;执行top命令&#xff0c;发现存在100%cpu占用进程&#xff0c;cpu idle为0 看到此时基本很明确服务器存在挖矿程序 查…

Altair®(澳汰尔)Inspire™ Extrude Metal 专为进行高效金属挤压设计

所有挤压公司都希望消除成本高昂的原型设计&#xff0c;缩短重新设计周期。现在&#xff0c;各种规模的企业组织均可获得高等物理特性仿真技术。Inspire Extrude Metal 易于掌握&#xff0c;让所有工程师或设计师都能通过仿真&#xff0c;更好地了解任何特定金属合金的型材特性…

【问题处理】银河麒麟操作系统实例分享,银河麒麟高级服务器操作系统mellanox 网卡驱动编译

1.Mellanox 网卡源码驱动下载链接&#xff1a; https://www.mellanox.com/downloads/ofed/MLNX_EN-5.7-1.0.2.0/MLNX_EN_SRC-5.7-1.0.2.0.tgz 2.系统及内核版本如下截图&#xff1a; 3.未升级前 mellanox 网卡驱动版本如下&#xff1a; 4.解压 “MLNX_EN_SRC-5.7-1.0.2.0.tg…

2020 年 12 月青少年软编等考 C 语言一级真题解析

目录 T1. 字符三角形思路分析 T2. 计算 (a b) (c - b) 的值T3. 晶晶赴约会思路分析 T4. 角谷猜想思路分析 T5. 求满足条件的 3 位数思路分析 T1. 字符三角形 给定一个字符&#xff0c;用它构造一个底边长 5 5 5 个字符&#xff0c;高 3 3 3 个字符的等腰字符三角形。 时间…

未来AI技术方面的创业机会

私信博主&#xff0c;加入有前途的行业。 人工智能&#xff08;AI&#xff09;技术的快速发展和广泛应用为创业者提供了丰富的机会。随着技术的不断进步&#xff0c;AI的应用领域正在不断拓展&#xff0c;为创业者提供了广阔的创新空间。以下是一些未来AI技术方面的创业机会&a…

JavaWeb后端——Mybatis

概述 Mybatis&#xff1a;Java程序来对数据库进行操作&#xff0c;一款优秀的持久层框架&#xff0c;用于简化JDBC的开发 SSM&#xff1a;SpringMVC、Spring、Mybatis 快速入门 步骤2&#xff1a;注意数据库连接的四要素 application.properties&#xff1a;springboot 的默…

【leetcode】动态规划::前缀和

标题&#xff1a;【leetcode】前缀和 水墨不写bug 正文开始&#xff1a; &#xff08;一&#xff09;简单前缀和 描述 给定一个长度为n的数组a1​,a2​,....an​. 接下来有q次查询, 每次查询有两个参数l, r. 对于每个询问, 请输出al​al1​....ar​ 输入描述&#xff1a; 第一…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《考虑灵活爬坡产品的虚拟电厂两阶段分布鲁棒优化运营策略》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

轨迹规划 | 图解最优控制LQR算法(附ROS C++/Python/Matlab仿真)

目录 0 专栏介绍1 最优控制理论2 线性二次型问题3 LQR的价值迭代推导4 基于差速模型的LQR控制5 仿真实现5.1 ROS C实现5.2 Python实现5.3 Matlab实现 0 专栏介绍 &#x1f525;附C/Python/Matlab全套代码&#x1f525;课程设计、毕业设计、创新竞赛必备&#xff01;详细介绍全…

ccf201712-2游戏

队列应用 import java.util.LinkedList; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);LinkedList<Integer> queue new LinkedList<>();int total scanner.nextInt();int k …

硬件标准化之道:Linux社区与硬件厂商的协同创新

在Linux的广阔世界中&#x1f30c;&#xff0c;与各式各样的硬件设备进行互动和协作是一项不断进行的挑战&#x1f527;。硬件厂商和Linux社区的紧密合作&#xff0c;通过制定一系列标准和协议&#x1f4dc;&#xff0c;使得从键盘&#x1f3b9;和鼠标&#x1f5b1;到复杂的网络…

Transformer介绍

一、Transformer概述 Transformer模型是一种基于自注意力机制的神经网络架构&#xff0c;主要用于处理序列数据&#xff0c;如自然语言文本。它由编码器&#xff08;Encoder&#xff09;和解码器&#xff08;Decoder&#xff09;两部分组成&#xff0c;通过多层的自注意力机制…

七、Ajax(Django开发)

Ajax&#xff08;Django开发&#xff09; 知识点的回顾&#xff1a;1.Ajax请求2.订单小结3.图表4.关于文件上传4.1基本操作案例&#xff1a;批量上传数据案例&#xff1a;混合数据&#xff08;Form&#xff09;4.2启用media案例&#xff1a;混合数据&#xff08;form&#xff0…

2024-简单点-python单例模式-__call__和__new__-线程安全版本

单例属性可变 先看一个版本&#xff0c;这版本虽然能控制成一个单实例&#xff0c;但是实例的值却可以变。。 import threading class Singleton: _instance None _lock threading.Lock() def __new__(cls, *args, **kwargs): # 加锁以确保线程安全 with cls._lock: …

C++设计模式:桥模式(五)

1、定义与动机 桥模式定义&#xff1a;将抽象部分&#xff08;业务功能&#xff09;与实现部分&#xff08;平台实现&#xff09;分离&#xff0c;使他们可以独立地变化引入动机&#xff1a; 由于某些类型的固有的实现逻辑&#xff0c;使得它们具有两个变化的维度&#xff0c;…