蓝桥杯真题 分巧克力
题目描述
儿童节那天有 K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。
小明一共有 N 块巧克力,其中第 i 块是 Hi×Wi 的方格组成的长方形。为了公平起见,
小明需要从这 N 块巧克力中切出 K 块巧克力分给小朋友们。切出的巧克力需要满足:
形状是正方形,边长是整数;
大小相同;
例如一块 6×5 的巧克力可以切出 6 块 2×2 的巧克力或者 2 块 3×3 的巧克力。
当然小朋友们都希望得到的巧克力尽可能大,你能帮小明计算出最大的边长是多少么?
输入描述
第一行包含两个整数 N,K (1≤N,K≤10^5)。
以下 N 行每行包含两个整数 H_i,W_i (1≤Hi,Wi≤10^5)。
输入保证每位小朋友至少能获得一块 1×1 的巧克力。
输出描述
输出切出的正方形巧克力最大可能的边长。
样例输入
2 10
6 5
5 6
样例输出
2
解法一 暴力法(超时)
思路:
把边长从1试到最大的边长,每个值都试一下,一直试到刚好够分的最大边长为止。
思路很简单,不过会超时
代码如下:
#include<bits/stdc++.h>
using namespace std;
int h[100010], w[100010];
int n, k;
bool check(int d) { //检查够不够分int num = 0;for (int i = 0; i < n; i++)num += (h[i] / d) * (w[i] / d);if (num >= k) return true; //够分else return false; //不够分
}
int main() {cin >> n >> k;for (int i = 0; i < n; i++) cin >> h[i] >> w[i];int d = 1; //正方形边长while (1) {if (check(d)) d++; //边长从1开始,一个个地暴力试试else break;}cout << d - 1;return 0;
}
解法二 二分法
思路:
通过二分法对边长d的取值二分,这样就可以将复杂度从O(n)优化到O(logn)
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n, k;
int h[100010], w[100010];
bool check(int d) {int num = 0;for (int i = 0; i < n; i++)num += (h[i] / d) * (w[i] / d);if (num >= k) return true; //够分else return false; //不够分
}
int main() {cin >> n >> k;for (int i = 0; i < n; i++) cin >> h[i] >> w[i];int L = 1, R = 100010;while (L < R) {int mid = (L + R + 1) >> 1; //除2,向右取整if (check(mid))L = mid; //新的搜索区间是右半部分,所以R不变,调整L=mid;elseR = mid - 1; //新的搜索区间是左半部分,所以L不变,调整R=mid–1。}cout << L;return 0;
}
ly
蓝桥杯真题 分巧克力相关推荐
- 蓝桥杯真题2017-2021
刷完近几年真题,感觉理解完之后,拿奖问题不大,本人这次获得2022年蓝桥杯javaB组省一,以下是历年javaB组省赛题目. 文章目录 2017年真题 一.购物单 二.纸牌三角形 三.承压计算 四.魔 ...
- 包子凑数-蓝桥杯真题 线性方程组求解(c++实现)
上文链接:日期问题-蓝桥杯真题 具备基础日期知识查看(c++) 包子凑数 小明几乎每天早晨都会在一家包子铺吃早餐.他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子.每种蒸笼都有非常多笼,可 ...
- 第五届蓝桥杯真题解析【JavaC组】
第五届蓝桥杯真题解析[JavaC组] 业精于勤,荒于嬉:行成于思,毁于随.--韩愈 文章目录 ***第五届蓝桥杯真题解析[JavaC组]*** 前言 A:猜年龄 B:等额本金 C:猜字母 D:大衍数列 ...
- 第十届蓝桥杯c语言试题,第十届蓝桥杯真题编程题1-7解析(高级组).pdf
scratch 少儿编程第十届蓝桥杯真题 7 大家好 ~今天我们来讲解 scratch 蓝桥杯第十届编程大题的第七道题. 同样,这道题也是非常有难度的一道题.一起来看一下吧 解析: 女孩的程序 1.在 ...
- 第九届蓝桥杯真题解析JavaC组
第九届蓝桥杯真题解析JavaC组 文章目录 ***第九届蓝桥杯真题解析JavaC组*** 前言 A.哪天回家 B.猴子分香蕉 C.字母阵列 D.第几个幸运数 E.书号验证 F.打印大X G.缩位求和 ...
- 第六届蓝桥杯真题总结
第六届蓝桥杯真题总结 第一题:奖券数目 有些人很迷信数字,比如带"4"的数字,认为和"死"谐音,就觉得不吉利.虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求 ...
- 2016年第七届蓝桥杯真题解析JavaC组
相关题目: 2016年第七届蓝桥杯真题解析JavaB组 2016年第七届蓝桥杯真题解析JavaC组 2017年第八届蓝桥杯真题解析JavaB组 2017年第八届蓝桥杯真题解析JavaC组 2018年第 ...
- python解答蓝桥杯真题2 猜年龄 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在19351936年应邀来中国清华大学讲学。。。
python解答蓝桥杯真题2 猜年龄 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学.他曾在1935~1936年应邀来中国清华大学讲学... 问题描述 全排列模板: 美国数学家维纳(N. ...
- 【蓝桥杯真题】16天冲刺 Python
距离比赛很快了,希望和我一起准备的PY党能更加熟练的掌握Python! 1.距离和(模拟赛填空题) 问题描述: 两个字母之间的距离定义为它们在字母表中位置的距离.例如 A和 C 的距离为 2,L 和 ...
最新文章
- R语言嵌套方差分析(Nested ANOVA)实战
- em算法的java实现_EM算法 - Java教程 - 找一找教程网
- python怎么读取文件-python如何读取文件的数据
- eclipse中一个项目引用另一个项目的方法
- 进入编辑模式、vim命令模式、vim实践
- rsatool使用步骤图解_图解360系统重装大师如何使用
- 第十二章 图形用户界面
- linux --- inotify 文件系统变化通知机制
- zabbix 代理报错
- 利用360安全防护代码加固你的网店、网站
- 高斯克吕格投影中有关带号与经度的关系
- 知道创宇荣获“年度公益贡献安全企业”及“中国网安产业100强”
- 学微信小程序要学些什么?
- 关于dvb 基本知识
- 数字通信第三章——多维信号传输
- p5.js 光速入门中文教程
- 英文seo发外链的方法技巧
- MTO和Manytasking MATP MOOMFO 中G函数
- 制作稳定版本的rootfs
- 三问腾讯地图:棋差一招?另辟蹊径?后发制人?