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

news/2024/11/15 7:33:07/

✍个人博客: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计算要加1if (check(mid))l = mid; //因为是计算在满足k下,巧克力尽可能的大,所以这里下限要增大即长度增大elser = mid - 1;}printf("%d", l);return 0;
}

http://www.ppmy.cn/news/21099.html

相关文章

ElasticSearch从入门到出门【上】

文章目录初识elasticsearch了解ESelasticsearch的作用ELK技术栈elasticsearch和lucene为什么不是其他搜索技术&#xff1f;倒排索引正向索引倒排索引正向和倒排ES的一些概念文档和字段索引和映射mysql与elasticsearch安装elasticsearch部署单点es部署kibana安装IK分词器在线安装…

VS搭载Sqlite3用法详解

本篇采用动态库静态调用方式&#xff0c;动态库链接如下https://download.csdn.net/download/u014272404/87406250静态调用方式&#xff1a;1.将Database.dll sqlite3.dll 添加到执行目录中2.在stdafx.h中包含&#xff08;工程目录下&#xff09;#include "Include/DataBa…

Kubernetes考试题(CKA)

CKA题目 每次还原初始化快照后&#xff0c;开机后等5分钟&#xff0c;ssh登录node01&#xff08;11.0.1.112&#xff09;检查一下所有的pod&#xff0c;确保都为Running&#xff0c;再开始练习。 kubectl get pod -A1、权限控制RBAC 问题 设置配置环境&#xff1a; [candi…

Windows10安装java环境

Windows10安装java环境 文章目录Windows10安装java环境下载解压配置下载 Java8 https://www.oracle.com/java/technologies/downloads/#java8-windows Java11 https://www.oracle.com/java/technologies/downloads/#java11-windows Java17 https://www.oracle.com/java/techno…

tomcat多实例优化及zabbix监控群集

tomcat简介Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目&#xff0c;由Apache,Sun和其他一些公司及个人共同开发而成。Tomcat服务器是一个免费的开放源代码的Web应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和…

早一点开启人生第二曲线

这个假期我回老家了&#xff0c;期间参加了一个高中同学聚会&#xff0c;大家多年未见聊的非常尽兴。同学们有发展非常好的&#xff0c;也有小日子过的不错的。 大家都很开心&#xff0c;但飞哥是个例外&#xff0c;飞哥是我高中最好的朋友之一&#xff0c;这次聚会他一直在喝…

关于灰度发布基本问题的解答及轻量化落地方案

由于工作需要&#xff0c;近期又恶补了一下“灰度发布”的相关知识&#xff0c;也和身边小伙伴探讨了轻量化实现灰度发布的落地方案。借此机会&#xff0c;正好将相关内容跟大家整理分享一下。 什么是灰度&#xff1f; 要想了解这个问题就要先明白什么是灰度。灰度从字面意思…

计算机视觉OpenCv学习系列:第九部分、视频读写

第九部分、视频读写第一节、视频读写处理1.视频标准与格式2.视频读写与函数3.代码练习与测试学习参考第一节、视频读写处理 1.视频标准与格式 视频标准与格式&#xff1a; SD(Standard Definition)标清480PHD(High Definition)高清720P/1080PUHD(Ultra High Definition)超高清…