儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。
        小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形。
        为了公平起见,小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要满足:

  1. 形状是正方形,边长是整数
  2. 大小相同

  例如一块6x5的巧克力可以切出6块2x2的巧克力或者2块3x3的巧克力。

  当然小朋友们都希望得到的巧克力尽可能大,你能帮小Hi计算出最大的边长是多少么?

输入格式

  第一行包含两个整数N和K。(1 <= N, K <= 100000)
  以下N行每行包含两个整数Hi和Wi。(1 <= Hi, Wi <= 100000)
  输入保证每位小朋友至少能获得一块1x1的巧克力。

输出格式

  输出切出的正方形巧克力最大可能的边长。

样例输入

2 10
6 5
5 6

样例输出

2

直接使用暴力法,复杂度为O(n*N),会超时

#include<bits/stdc++.h>
using namespace std;const int n = 1e5 + 10;
struct cho {int height;int weidth;
} cc[n];//返回可以将m*n的巧克力分成多少块size*size的巧克力的数量
int cut(int m, int n, int size) {  return (m / size) * (n / size);
}int main() {int N, K; cin >> N >> K;for (int i = 1; i <= N; i++) {    cin >> cc[i].height >> cc[i].weidth;}int max_size = 1, count;for (int i = 1; i <= n; i++) {   //暴力,从1*1开始尝试起 复杂度为O(n*N) count = 0;for (int j = 1; j <= N; j++) {  //将所有巧克力的块数加起来 count += cut(cc[j].height, cc[j].weidth, i);}if (count >= K) {max_size = max(max_size, i);} else {break;  //外层for循环 } }cout << max_size;return 0;
}

下面使用二分法对边长进行搜索,从而达到加速的目的

在使用二分法时,需要注意循环条件为left < right ,且 middle = (left + right + 1) >> 1 ,这样可以避免死循环。但这不是死的,区间跳转条件 l = mid 决定了 mid = (l + r + 1) / 2。

#include<bits/stdc++.h>
using namespace std;const int n = 1e5 + 10;
struct cho {int height;int weidth;
} cc[n];//返回可以将m*n的巧克力分成多少块size*size的巧克力的数量
int cut(int m, int n, int size) {  return (m / size) * (n / size);
}int main() {int N, K; cin >> N >> K;for (int i = 1; i <= N; i++) {    cin >> cc[i].height >> cc[i].weidth;}int count;int left = 1, right = 1e5, middle; while (left < right) {   //二分法// +1 防止死循环 middle = (left + right + 1) / 2;count = 0;// cout << 55 << endl; 测试死循环用 for (int j = 1; j <= N; j++) {  //将所有巧克力的块数加起来 count += cut(cc[j].height, cc[j].weidth, middle);}if (count >= K) {left = middle;// cout << 11 << endl;  测试死循环用 } else if (count < K) {right = middle - 1;// cout << 22 << endl;   测试死循环用}}// 当while循环退出时,left必定等于right,因为是闭区间,所以最终结果就是leftcout << left;return 0;
}

觉得有用就点个赞吧~

分巧克力(二分法,且注意避免边界问题)相关推荐

  1. C++实现 1227. 分巧克力

    C++实现 1227. 分巧克力   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在CSDN中写博客,唯一博客更新的地址为:亓官 ...

  2. 蓝桥杯 2017试题I 分巧克力(二分求解)

    /*儿童节那天有K位小朋友到小明家做客.小明拿出了珍藏的巧克力招待小朋友们. 小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形. 为了公平起见,小明需要从这 N 块巧克力中切出K块巧 ...

  3. 蓝桥杯第八届省赛JAVA真题----分巧克力

    标题: 分巧克力 儿童节那天有K位小朋友到小明家做客.小明拿出了珍藏的巧克力招待小朋友们. 小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形. 为了公平起见,小明需要从这 N 块巧克 ...

  4. 题目 1885: 2017 分巧克力

    蓝桥杯2017年第八届真题-分巧克力 - C语言网 做题记录: 第一次(16分钟/78')超时: 通过举例,可以直到长宽  a*b的巧克力,分边长为i的巧克力可以分(a/i)*(b/i)块 思路:ma ...

  5. 蓝桥杯 分巧克力 python

    蓝桥杯 分巧克力 python 题目标题 儿童节那天有K位小朋友到小明家做客.小明拿出了珍藏的巧克力招待小朋友们. 小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形. 为了公平起见, ...

  6. 蓝桥杯java第八届第九题--分巧克力

    标题: 分巧克力儿童节那天有K位小朋友到小明家做客.小明拿出了珍藏的巧克力招待小朋友们.小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形.为了公平起见,小明需要从这 N 块巧克力中切 ...

  7. 2017蓝桥杯省赛---java---B---9(分巧克力)

    题目描述 标题: 分巧克力儿童节那天有K位小朋友到小明家做客.小明拿出了珍藏的巧克力招待小朋友们.小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形.为了公平起见,小明需要从这 N 块 ...

  8. 2017蓝桥杯c语言C组承压计算,蓝桥杯2017Java B组---分巧克力and承压计算

    分巧克力 package lala; /* *儿童节那天有K位小朋友到小明家做客.小明拿出了珍藏的巧克力招待小朋友们. 小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形. 为了公平起 ...

  9. 【每日一题2019-11-14】-蓝桥杯 prev37 分巧克力

    [每日一题2019-11-14]-蓝桥杯 prev37 分巧克力 文章目录 [每日一题2019-11-14]-蓝桥杯 prev37 分巧克力 1.问题描述 2.输入格式 3.样例输入 4.样例输出 5 ...

  10. Java实现第八届蓝桥杯分巧克力

    分巧克力 题目描述 儿童节那天有K位小朋友到小明家做客.小明拿出了珍藏的巧克力招待小朋友们. 小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形. 为了公平起见,小明需要从这 N 块巧 ...

最新文章

  1. 华为充电器接口叫什么_插座USB接口跟手机充电器有什么不同_电工百科
  2. MySQL数据库开发理念_mysql之数据库基本理念
  3. 数据流通与交易国家实验室成立 由上海牵头组建瞄准行业重大需求
  4. WINCE6.0深入理解TOC
  5. 是什么优化让 .NET Core 性能飙升?
  6. Python网络编程(OSI模型、网络协议、TCP)
  7. (转)WebSphere的web工程中怎么获取数据源
  8. Dart语言精简入门介绍
  9. python中有哪些重要的书写规则_一文读懂Python代码的书写规范
  10. Eigen3的库使用
  11. 科技+铁腕齐下 济宁市智慧环保建设成效显著
  12. python 列表生成式 字典生成式
  13. Android小知识-剖析OkHttp中的五个拦截器(上篇)
  14. Sqoop Java API 导入应用案例
  15. 【Notification】屏蔽特定应用的通知提示
  16. Visual Studio中C++关于Unicode字符集和多字节字符集
  17. Win11 Windows聚焦失效修复方法
  18. ubuntu18 搜狗输入法不显示
  19. JAVA中成员变量和局部变量区别
  20. 模板 2018-01-27 分解因数 分解质因数

热门文章

  1. Linux终端和Line discipline图解
  2. 明日方舟 红松林故事集
  3. 用nodejs写一个命令行应用-前言
  4. RAID中条带的概念
  5. coreldraw x8段落_CorelDRAW文本段落如何调整行距
  6. 同比、环比、YTD、MTD
  7. 算法可以申请专利么_国内提供计算机视觉(CV)算法岗位的公司名单
  8. 【笔试or面试】3G门户校园招聘
  9. python中如何调取wind数据_python实现从wind导入数据
  10. HbuildX中使用类似VSCode配色