分巧克力

简介: 儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形。
儿童节那天有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
思路:
二分查找最大可能的边长

#include <iostream>
using namespace std;

#define N 1000005

struct stu
{
    int h;
    int w;
};
stu s[N];


bool judge(int len) {
    int sum = 0;
    for (int i = 0; i < len; i++) {
        sum += (s[i].h/len) * (s[i].w/len);  //满足长宽能切几块
        if (sum >= k) { //能切的块数满足要求
            return 1;
        }
    }
    return 0;
}



int main() {

    int n, k;  //k代表

    for (int i = 0; i < n; i ++) {
        cin >> s[i].h >> s[i].w;
    }

    int left = 1;
    int right = 100000;

    while (left <= right) {
        int mid = left + ((right-left)>>1);  //防止溢出
        if ( judge(mid)) { //满足条件 则尝试更大的
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }

    cout << left;

    return 0;
}
目录
相关文章
|
Oracle Java 关系型数据库
Random和ThreadLocalRandom区别
Random和ThreadLocalRandom区别
175 3
|
安全 编译器 程序员
C++14特性:解锁现代C++功能以获得更具表现力和更高效的代码
C++14特性:解锁现代C++功能以获得更具表现力和更高效的代码
275 0
|
DataWorks 关系型数据库 API
DataWorks产品使用合集之在配置独享调度资源组的环境变量时,如何通过环境变量的方式进行配置
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
前端开发 JavaScript 安全
微前端架构采用 TypeScript 提升开发效率和代码可靠性
【6月更文挑战第12天】微前端架构采用 TypeScript 提升开发效率和代码可靠性。TypeScript 的类型安全防止了微前端间的类型错误,智能提示与自动补全加速开发,重构支持简化代码更新。通过定义公共接口和使用 TypeScript 编写微前端,确保通信一致性与代码质量。在构建流程中集成 TypeScript,保证构建正确性。总之,TypeScript 在微前端架构中扮演关键角色,推荐用于大型前端项目。
145 4
|
前端开发 计算机视觉 Python
Python和网络摄像头也有关系?
Python和网络摄像头也有关系?
|
存储 算法
数据结构和算法学习记录——特殊线性表之队列-队列的概念、队列结构体类型定义 、基本接口函数、初始化函数、销毁队列函数、入队列函数、判断队列是否为空、出队列函数、读取队头队尾的数据 、计算队列数据个数
数据结构和算法学习记录——特殊线性表之队列-队列的概念、队列结构体类型定义 、基本接口函数、初始化函数、销毁队列函数、入队列函数、判断队列是否为空、出队列函数、读取队头队尾的数据 、计算队列数据个数
111 0
|
存储 计算机视觉 数据格式
OpenCV库、Armadillo库矩阵数据格式互转的方法
本文介绍在C++语言中,矩阵库Armadillo的mat、vec格式数据与计算机视觉库OpenCV的Mat格式数据相互转换的方法~
203 1
OpenCV库、Armadillo库矩阵数据格式互转的方法
|
Java Android开发
Eclipse启动时指定jdk版本
Eclipse启动时指定jdk版本
270 0
|
机器学习/深度学习 人工智能 算法
|
SQL 负载均衡 前端开发
pgpool-II 4.3 中文手册 - 入门教程
pgpool-II 4.3 中文手册 - 入门教程
1071 0
pgpool-II 4.3 中文手册 - 入门教程