题目描述

儿童节那天有 K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。

小明一共有 N 块巧克力,其中第 i 块是 Hi​×Wi 的方格组成的长方形。为了公平起见,

小明需要从这 N 块巧克力中切出 K 块巧克力分给小朋友们。切出的巧克力需要满足:

  1. 形状是正方形,边长是整数;

  2. 大小相同;

例如一块 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

蓝桥杯真题 分巧克力相关推荐

  1. 蓝桥杯真题2017-2021

    刷完近几年真题,感觉理解完之后,拿奖问题不大,本人这次获得2022年蓝桥杯javaB组省一,以下是历年javaB组省赛题目. 文章目录 2017年真题 一.购物单 二.纸牌三角形 三.承压计算 四.魔 ...

  2. 包子凑数-蓝桥杯真题 线性方程组求解(c++实现)

    上文链接:日期问题-蓝桥杯真题 具备基础日期知识查看(c++) 包子凑数 小明几乎每天早晨都会在一家包子铺吃早餐.他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子.每种蒸笼都有非常多笼,可 ...

  3. 第五届蓝桥杯真题解析【JavaC组】

    第五届蓝桥杯真题解析[JavaC组] 业精于勤,荒于嬉:行成于思,毁于随.--韩愈 文章目录 ***第五届蓝桥杯真题解析[JavaC组]*** 前言 A:猜年龄 B:等额本金 C:猜字母 D:大衍数列 ...

  4. 第十届蓝桥杯c语言试题,第十届蓝桥杯真题编程题1-7解析(高级组).pdf

    scratch 少儿编程第十届蓝桥杯真题 7 大家好 ~今天我们来讲解 scratch 蓝桥杯第十届编程大题的第七道题. 同样,这道题也是非常有难度的一道题.一起来看一下吧 解析: 女孩的程序 1.在 ...

  5. 第九届蓝桥杯真题解析JavaC组

    第九届蓝桥杯真题解析JavaC组 文章目录 ***第九届蓝桥杯真题解析JavaC组*** 前言 A.哪天回家 B.猴子分香蕉 C.字母阵列 D.第几个幸运数 E.书号验证 F.打印大X G.缩位求和 ...

  6. 第六届蓝桥杯真题总结

    第六届蓝桥杯真题总结 第一题:奖券数目 有些人很迷信数字,比如带"4"的数字,认为和"死"谐音,就觉得不吉利.虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求 ...

  7. 2016年第七届蓝桥杯真题解析JavaC组

    相关题目: 2016年第七届蓝桥杯真题解析JavaB组 2016年第七届蓝桥杯真题解析JavaC组 2017年第八届蓝桥杯真题解析JavaB组 2017年第八届蓝桥杯真题解析JavaC组 2018年第 ...

  8. python解答蓝桥杯真题2 猜年龄 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在19351936年应邀来中国清华大学讲学。。。

    python解答蓝桥杯真题2 猜年龄 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学.他曾在1935~1936年应邀来中国清华大学讲学... 问题描述 全排列模板: 美国数学家维纳(N. ...

  9. 【蓝桥杯真题】16天冲刺 Python

    距离比赛很快了,希望和我一起准备的PY党能更加熟练的掌握Python! 1.距离和(模拟赛填空题) 问题描述: 两个字母之间的距离定义为它们在字母表中位置的距离.例如 A和 C 的距离为 2,L 和  ...

最新文章

  1. R语言嵌套方差分析(Nested ANOVA)实战
  2. em算法的java实现_EM算法 - Java教程 - 找一找教程网
  3. python怎么读取文件-python如何读取文件的数据
  4. eclipse中一个项目引用另一个项目的方法
  5. 进入编辑模式、vim命令模式、vim实践
  6. rsatool使用步骤图解_图解360系统重装大师如何使用
  7. 第十二章 图形用户界面
  8. linux --- inotify 文件系统变化通知机制
  9. zabbix 代理报错
  10. 利用360安全防护代码加固你的网店、网站
  11. 高斯克吕格投影中有关带号与经度的关系
  12. 知道创宇荣获“年度公益贡献安全企业”及“中国网安产业100强”
  13. 学微信小程序要学些什么?
  14. 关于dvb 基本知识
  15. 数字通信第三章——多维信号传输
  16. p5.js 光速入门中文教程
  17. 英文seo发外链的方法技巧
  18. MTO和Manytasking MATP MOOMFO 中G函数
  19. 制作稳定版本的rootfs
  20. 三问腾讯地图:棋差一招?另辟蹊径?后发制人?

热门文章

  1. 中国公司使用巴西文字插图介绍产品?
  2. WordPress主题下载Sparkling个人简洁博客主题
  3. ORBSLAM3阅读笔记1 System
  4. STM32F103C8T6外部中断
  5. 2019中兴校招面经整理
  6. mars-3d 台风来喽(台风的制作)
  7. 单例模式 懒汉式与恶汉式
  8. 无法停止“通用卷”设备的解决方法
  9. 新零售+大数据>2:新零售时代下的商业模式
  10. ElasticSearch 2 (36) - 信息聚合系列之显著项