蓝桥杯学习记录||1227. 分巧克力

AcWing||1227. 分巧克力

活动地址:https://www.acwing.com/activity/content/19/

考察要点:二分

题目要求

儿童节那天有 K 位小朋友到小明家做客。

小明拿出了珍藏的巧克力招待小朋友们。

小明一共有 N 块巧克力,其中第 i 块是 Hi×Wi 的方格组成的长方形。

为了公平起见,小明需要从这 N 块巧克力中切出 K 块巧克力分给小朋友们。

切出的巧克力需要满足:

形状是正方形,边长是整数
大小相同
例如一块 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

题目地址:https://www.acwing.com/problem/content/1229/

解析:每块巧克力的长宽是不同的,所以需要建立一个二维数组进行存储,切割为正方形的巧克力,所以我们只需要枚举 边长 ,切割后是边角是不能进行拼接的。

代码思路 :巧克力的边长在1 ~ 105 之间 所以在区间内直接使用二分法,切割每个巧克力 块( 有效块数 = (长/边长) * (宽/边长) ) 将每块巧克力的有效快数加起来,若够分,则二分 还可以向上取 即 l = mid 否则 r = mid - 1;

#include <iostream>
#include <cstring>
#include <algorithm>
 using namespace std;
 const int N = 1e5 + 10;
 int n, k, h[N], w[N];

bool check(int mid)
{
    int sum = 0;  //为有效巧克力块数之和
    for (int i = 0; i < n; i ++ )          //对每块巧克力进行切割
    {
        sum += h[i] / mid * (w[i] / mid);  //先除后乘 所以需要加括号
        if(sum >= k) return true;            //切割到每个人都有了 则返回 true
    }
    return false;
}
 
int main()
{
    scanf("%d%d",&n, &k);              //n 块巧克力 k 个人
    for (int i = 0; i < n; i ++ )
        scanf("%d%d", &h[i],&w[i]);
        
    int l = 1, r = 1e5;
    while (l < r)
    {
        int mid = l + r + 1 >> 1;      //向上取整 避免死循环
        if( check(mid) ) l = mid;      //如果够分则边长 可取大
        else r = mid - 1;             //不够分 则取小
    }
    
    printf("%d\n",r);
    return 0;
}

本题:1227. 分巧克力
代码参考:视频讲解

《智能门锁》是蓝桥杯模拟试题中的一个压缩文件,后缀为.rar,这是一种常见的压缩格式。该压缩文件中可能包含与智能门锁相关的一些资料、文档、程序代码等内容。 智能门锁是一种结合了现代科技和安全需求的产品,通过使用该门锁,可以提高家居安全性和便利性。智能门锁通常采用电子技术与机械结合的方式,通过密码、指纹、人脸识别等方式对门进行解锁,具有高度的安全性和智能化。 通过解压《智能门锁》.rar文件,我们可以获取其中的内容,可能包括以下方面: 1. 产品介绍:介绍智能门锁的功能、特点和工作原理等,让用户了解该产品的基本信息。 2. 安装手册:提供智能门锁的安装教程,指导用户如何安装和调试智能门锁的硬件设备。 3. 用户指南:为用户提供使用智能门锁的详细说明,包括设置开锁密码、添加指纹或人脸识别等操作步骤。 4. 技术文档:包含智能门锁的技术规格、接口说明、电路图等详细信息,适合开发人员进行相关应用开发。 5. 示例代码:可能会提供一些示例代码,供开发人员参考和学习,帮助他们实现自己的智能门锁应用。 总的来说,《智能门锁》.rar文件可能会包含智能门锁的各个方面的资料和文档,帮助用户了解和使用智能门锁,以及开发人员进行智能门锁相关应用的开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值