首页 > 其他分享 >蓝桥杯-分巧克力

蓝桥杯-分巧克力

时间:2024-05-03 15:58:03浏览次数:16  
标签:巧克力 int sum mid 蓝桥 边长 mx

儿童节那天有 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≤1e5,
1≤Hi,Wi≤1e5

输入样例:

2 10
6 5
5 6
输出样例:
2

题解:
(ps: 一道简单的二分, 代码中有很详细的注释, 不多解释了, 看不懂的话可以再问)~

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int a[N], b[N];  // 存储巧克力的长宽
int n, m, mx = 0; 
bool check(int mid)
{
    int sum = 0;    // 以 mid 为边长的巧克力总块数
    for (int i = 0; i < n; i ++)
    {
        int x = a[i] / mid, y = b[i] / mid;
        sum += x * y;
    }
    return sum >= m;
}
int main()
{
    cin >> n >> m;
    for (int i = 0; i < n; i ++) 
    {
        cin >> a[i] >> b[i];
        mx = max(a[i], mx); mx = max(b[i], mx); // mx 是二分的右边界, 即输入的边长最的最大值
    }
    
    int l = 1, r = mx;
    while (l < r)
    {
        int mid = l + r + 1 >> 1;
        if (check(mid)) l = mid;    // if sum >= m, 说明巧克力的边长小了, 或者是 刚好
        else r = mid - 1;   // sum < m 边长 大了
    }
    cout << l << endl;  // 题目保证了有解, 不需要加判断了
    return 0;
}

觉得不错的话, 点个赞吧~

标签:巧克力,int,sum,mid,蓝桥,边长,mx
From: https://www.cnblogs.com/xxctx/p/18171275

相关文章

  • 2024第十五届蓝桥杯网络安全赛项部分题目 WriteUp
    2024第十五届蓝桥杯网络安全赛项部分题目WriteUp爬虫协议根据提示,访问/robots.txt,得到敏感路径/38063b612387b10e22f4bd0d71a46a4e/,访问其中的/9de33df789dc91e984a091e6dce2dfb1得到flag。flag{494547b4-f13f-47de-b1a5-a99f20495cd7}packet使用过滤器tcpcontains"fla......
  • 第十五届蓝桥杯 网络安全赛道 ezjava
    1.前言前一秒还在robots.txt找flag,下一秒就java内存马了,还不出网,这很......
  • 蓝桥杯-数的划分(DFS)
    0.题目问题描述将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。例如:n=7,k=3,下面三种分法被认为是相同的。1,1,5;1,5,1;5,1,1;问有多少种不同的分法。输入格式n,k输出格式一个整数,即不同的分法样例输入73样例输出4数据......
  • 2024蓝桥杯省赛C/C++程序设计A组题目简析
    2024蓝桥杯省赛C/C++程序设计A组题目简析A题意:计算一段区间内日期的中文表达的总笔画数>50的天数按照题意枚举即可。注意个位数字前面需要加一个“零”,也就是多13笔。B题意:\(5\times5\)的棋盘下五子棋,最终下满棋盘并和棋的情况数dfs或者遍历二进制去枚举棋子位置的情况均可......
  • 【2024蓝桥B组】好数
    好数题目 题目分析1.蓝桥杯不怕麻烦的,一般可以选择用longlongint替换int,防止数据过大2.这道题不怕麻烦的话,可以直接暴力解,用多个if语句进行判断即可3.想要美观点的,就进行数位判断4.这道题就一个关键点:奇数位对奇数,偶数位对偶数代码1#include<iostream>usingname......
  • 第十五届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组
    Preface答辩圈钱杯,去年省赛的题好歹还有些有意思的题(指杜教筛),今年变成煞笔题开会了是吧两个小时多一点就全写完了,然后开始给后面三题写对拍(结果发现其实都没写挂纯在浪费时间)考完感觉AK有望,结果后面发现最后一题漏看条件了,苦露西而且中间EF两题全偷懒开__int128了,反正用下发的......
  • 【2024蓝桥B组】小球反弹
    小球反弹题目题目分析一个比较绕脑的数学问题。。。首先:小球能过从左上角出发,然后回到左上角,那么其x方向的路径长度则为2k1x,y方向的路径长度则为2k2y。其次,我们得知其x与y的速度比值为15:17,由公式:时间*速度=路程可得:t*dx=2k1x,t*dy=2k2y然后,通过简单的数学变换,我们可以得出:k......
  • 第十五届蓝桥杯C++B组省赛总结
    A握手问题简单模拟,答案为:12045ptsB小球反弹数学,最重要的一点,不考虑反弹,一直让小球走,直到达到一个顶点,它就会反弹回去。所以问题就变成了扩展这些方块,直到满足小球的角度,让小球能达到另一个顶点。\(233333\times15a=343720\times17b\)解出来a和b就知道我们要延......
  • P8741 [蓝桥杯 2021 省 B] 填空问题 题解
    题目传送门试题A:空间【解析】本题考察计算机存储的基础知识,只要掌握空间存储的换算方法,就能够算出答案。【程序】#include<bits/stdc++.h>usingnamespacestd;intmain(){printf("%d\n",256*8/32*1024*1024);return0;}【答案】67108864......
  • P8679 [蓝桥杯 2019 省 B] 填空问题 题解
    题目传送门试题A:组队【解析】本题是一道经典的DFS搜索题,每次对各号位的选手进行DFS,找到各号位上有成绩的选手时再进行进一步搜索即可。【程序】#include<bits/stdc++.h>usingnamespacestd;intteam[20][6];intmax_sum;boolvis[20];voiddfs(intu,intsu......