第八届蓝桥杯省赛 C++ A/B组 - 分巧克力

news2024/9/21 22:31:36

✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343
📚专栏地址:蓝桥杯题解集合
📝原题地址:后缀表达式
📣专栏定位:为想参加蓝桥杯的小伙伴整理常考算法题解,祝大家都能取得理想成绩!
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

问题描述

儿童节那天有 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

思路

题目要求切出来的巧克力需要大小一致,这就可能出现不同的切法,例如一块 6×5 的巧克力可以切出 6 块 2×2 的巧克力或者 2 块 3×3 的巧克力。

并且是要在找到满足切出 k 块的前提下,使切出的巧克力尽可能的大。我们可以用暴力法来做,去枚举每一个 k 值,直到找到满足所有条件的最大 k 值为止,但时间复杂度会很高,所以可以用二分法进行优化,对 k 值进行二分。

故存在一个临界值,在满足能切出 k 块的前提下能切出最大的巧克力,当边长小于这个临界值,一定能切出 k 块,但是巧克力不是最大的,当边长大于这个临界值,就不能切出 k 块,直接排除掉。故当边长大于等于临界值时,下边界就得等于 mid,使边长不断增大直到找到临界值。

注意,这里是使下边界 l=mid,而不是 l=mid+1。因为我们要使 k 值尽可能的大,所以只要 check(mid) 满足条件,则 mid 就是合法值,如果 mid 已经是最大值则 mid+1 会错过。反之不满足条件的话就让 r=mid-1,因为此时 mid 已经不是合法值了,故直接舍弃即可。

代码

#include <bits/stdc++.h>
using namespace std;

int n, k;
const int N = 100010;
int h[N], w[N];

bool check(int mid) {
	int res = 0;
	for (int i = 0; i < n; i++) {
		res += (h[i] / mid) * (w[i] / mid);
		if (res >= k)
			return true;
	}
	return false;
}

int main() {
	scanf("%d%d", &n, &k);
	for (int i = 0; i < n; i++)
		scanf("%d%d", &h[i], &w[i]);

	int l = 1, r = 1e5; //至少能切出一块,所以下限为1上限为长宽最大值
	while (l < r) {
		int mid = l + r + 1 >> 1; //这里l=mid,所以mid计算要加1
		if (check(mid))
			l = mid; //因为是计算在满足k下,巧克力尽可能的大,所以这里下限要增大即长度增大
		else
			r = mid - 1;
	}
	printf("%d", l);
	return 0;
}

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

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

相关文章

全志A40i+Logos FPGA开发板(4核ARM Cortex-A7)硬件说明书(下)

前 言 本文档主要介绍板卡硬件接口资源以及设计注意事项等内容,测试板卡为创龙科技旗下的全志A40i+Logos FPGA开发板。 核心板的ARM端和FPGA端的IO电平标准一般为3.3V,上拉电源一般不超过3.3V,当外接信号电平与IO电平不匹配时,中间需增加电平转换芯片或信号隔离芯片。按键…

1、语义软分割算法(Semantatic Human Matting)原理及pytorcch代码详述

一、Semantatic Human Matting原理 Semantatic Human Matting 文章链接请点击这里 第一步:将输入图像送入到T-Net中进行计算,得到三张图:Bs、Fs和Us. T-Net:就是一个编码和解码的过程,和常见的语义分割网络类似 Bs:确定的背景区 Fs:确定的前景区 Us: 不确定的区域 第二…

计算机网络详解--套接字编程

目录 1.什么是网络编程 2.TCP/IP协议 3.Socket套接字 流套接字:使用传输层TCP&#xff08;传输控制协议&#xff09; 数据报套接字:使用传输层UDP&#xff08;用户数据报协议&#xff09; 原始套接字 4.Java数据报套接字通信模型 UDP数据报套接字编程 DatagramSocket A…

IDEA集成Docker配置

首先开启Docker的SSH连接&#xff0c;设置Docker允许远程连接sudo vim /lib/systemd/system/docker.service将ExecStart/usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd.sock注释替换为ExecStart/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run…

GP232RL替代FT232RL国产USB转串口/UART芯片

GP232RL为接口转换芯片&#xff0c;可以实现USB到串行UART接口的转换&#xff0c;也可转换到同步、异步Bit-Bang接口模式。具备可选择的时钟产生输出&#xff0c;以及新的FTDIChip-ID安全加密狗功能。 此外&#xff0c;还提供异步和同步bit bang接口模式。使用GP232RL的USB到串…

用Flutter实现GaiaControl BLE OTA升级功能,支持Android/IOS

代码基本移植官方GaiaControl Demo。 支持RWCP 断点续传 设置蓝牙mtu.协议。这里主要分析GAIA CSR ble ota的过程&#xff0c;协议等等&#xff0c;希望对你有所帮助。这里对蓝牙服务特性订阅都不谈。读者自行了解。 Gaia 是CSR 制定的一个上层使用协议&#xff0c;其在BR/EDR…

Swagger的使用

一、概述 RestFul Api文档在线自动生成工具 >Api文档与API定义同步更新直接运行&#xff0c;可以在线测试API接口支持多种语言:&#xff08;Java,Php&#xff09; 官网&#xff1a;https://swagger.io/ 二、使用 在项目中使用Swagger需要springfox&#xff1b; Swagger…

Axure 原型中的迭代设计

​“老师&#xff0c;什么是产品迭代&#xff1f;” “老师。产品迭代和平常的产品设计有什么不同吗&#xff1f;” “老师&#xff0c;产品迭代原型可以怎么做&#xff1f;需要全部重新绘制吗&#xff1f;” 在和小伙伴们的日常交流中&#xff0c;不乏对产品迭代存在疑惑的朋…

2023年,数据人谨记把握好这“四不要”和“四要”

2023年已经开启&#xff0c;这一年对任何组织数据治理的工作都是非常重要的&#xff0c;那么我们如何更好的掌握数据治理和应对数据治理项目就成为重中之重&#xff0c;下面就和大家谈谈数据治理学习和项目的一些心得体会&#xff0c;供大家参考。 不要相互割裂&#xff0c;要融…

VS Code配置snippets代码片段快速生成html模板,提高前端编写效率

先看下示例&#xff0c;在输入 ! 号回车后自动生成一段代码片段。 这样我们就可以更便捷的进行代码编写了。 配置方法如下&#xff1a; 然后找到对应的文件进行配置&#xff0c;例如 html.json&#xff0c;编写 .html 扩展名文件时就能触发。 我这选的 html.json 进行的配置…

CSS选择器整理学习(下)

书接上回&#xff0c;在前端项目开发中&#xff0c;有时候需要对特殊的元素进行特殊的处理&#xff0c;但有时候元素的位置不确定、层级不确定、数量不确定等问题&#xff0c;导致我们没办法进行元素的选择&#xff0c;这个时候我们就需要用到元素选择器了。 一、css选择器 1…

ESP-IDF:懒汉式和饿汉式单例模式测试代码

ESP-IDF:懒汉式和饿汉式单例模式测试代码 /单例模式测试/ /懒汉式/ class singleton_lazy { private: singleton_lazy(){}; public: static singleton_lazy *getinstance(){ if (pSingleton NULL){ pSingleton new singleton_lazy; } return pSingleton; } private: stati…

美摄云剪辑3.0:融合AIGC,实现效率提升

云剪辑3.0亮点速览 数字人视频一键生成本地素材剪辑无需等待上传支持Lottie动画导入01 模板化包装&#xff0c;一键生成数字人视频 伴随元宇宙技术的发展和产业数字化升级&#xff0c;数字人正在成为下一代互联网的基础设施。与此同时&#xff0c;AI的应用场景也愈加丰富。人…

网站被劫持的解决方案

网站被劫持怎么解决?用户打开网站就发现网站被篡改不是自己原来的页面&#xff0c;而是被变成被劫持的页面&#xff0c;以下几种情况以及对应的处理方法&#xff0c;一起来看看吧。 一、DNS劫持 DNS劫持是一种恶意攻击&#xff0c;其中&#xff0c;个人通过覆盖计算机的传输控…

TCP/IP详解与实例分析

TCP/IP详解 TCP/IP并不是一个具体的协议&#xff0c;而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇&#xff0c;只是因为在TCP/IP协议中TCP协议和IP协议最具代表性&#xff0c;所以被称为TCP/IP协议。 TCP/IP协议在一定程度上参考了OSI的体系结构&#xff0c;在TCP/…

前端面试题2023含答案 前端必备知识点 混淆 刷题 查漏补缺【持续更新中】

目录1. vue双向数据绑定&#xff08;响应式&#xff09;原理2. HTML 语义化&#xff08;语义化标签&#xff09;3. 标签上 title 与 alt 属性4. CSS单位&#xff1a;1px、1em、1rem、1vh / 1vw 的含义5. 网页前端性能优化的方式6. HTTP常见的状态码7. Vuex是什么&#xff08;有…

基于卡尔曼滤波器的PID控制-2

采用Simulink进行仿真&#xff01;&#xff01;Kalman算法由M函数实现。控制干扰信号wk)和测量噪声信号v(k)幅值均为0.10的白噪声信号&#xff0c;输入信号幅值为1.0、频率为0.5Hz 的正弦信号。采用卡尔曼滤波器实现信号的滤波,取O1&#xff0c;R1。仿真结果如图1和2所示。图1 …

PyQt5编程基础 2.1 GUI程序的基本框架

文章目录 创建纯代码GUI程序 创建目录 新建程序 创建GUI程序的基本过程(代码分析) 导入模块 创建应用程序 创建窗体 使用窗体类的GUI程序框架 创建项目目录 窗体设计 修改窗体的windowTitle 放一个label 放一个Push Button 保存窗体 代码设计 将QtApp中的ui文…

【自学Docker】Docker update命令

Docker update命令 大纲 docker update命令教程 docker update 命令可以用于更新一个或多个 Docker容器 的配置。该命令后面的 CONTAINER 可以是容器Id&#xff0c;或者是容器名。 docker update命令语法 haicoder(www.haicoder.net)# docker update [OPTIONS] CONTAINER […

网络编程套接字之UDP实现回显服务器及客户端

目录 前言&#xff1a; 基础理解 传输层协议 UDP TCP Socket API DatagramSocket API DatagramPacket API UDP实现回显服务器 完整代码展现&#xff08;有详细注释&#xff09; UDP实现回显客户端 完整代码展现&#xff08;有详细注释&#xff09; 小结&#xff1…