当前位置: 首页 > news >正文

蓝桥杯 8. 分巧克力

分巧克力

原题目链接

问题描述

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

小明一共有 N 块巧克力,其中第 i 块是 Hᵢ × Wᵢ 的长方形。为了公平起见,小明需要从这 N 块巧克力中切出 K 块巧克力分给小朋友们。

要求切出的巧克力满足以下条件:

  • 形状是正方形,边长是整数;
  • 大小相同。

例如:一块 6×5 的巧克力可以切出 62×2 的巧克力,或者 23×3 的巧克力。

所有小朋友都希望得到的巧克力尽可能大,你能帮小明计算出最大的边长是多少吗?


输入描述

  • 第一行包含两个整数 NK1 ≤ N, K ≤ 10⁵)。
  • 接下来 N 行,每行包含两个整数 HᵢWᵢ1 ≤ Hᵢ, Wᵢ ≤ 10⁵),表示每块巧克力的尺寸。

输入保证每位小朋友至少能获得一块 1×1 的巧克力。


输出描述

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


输入样例

2 10
6 5
5 6

输出样例

2

c++代码

#include<bits/stdc++.h>
#include<stdio.h>using namespace std;typedef long long ll;int main() {ll N, K, ans = 1, l = 1, r = 100000;scanf("%lld %lld", &N, &K);vector<vector<ll>> arr(N, vector<ll>(2));for (ll i = 0; i < N; i++) scanf("%lld %lld", &arr[i][0], &arr[i][1]);while(r >= l) {ll cnt = 0, mid = (l + r) / 2;for (ll j = 0; j < N; j++) cnt += (arr[j][0] / mid) * (arr[j][1] / mid);if (cnt >= K) ans = max(mid, ans), l = mid + 1;else r = mid - 1;}printf("%d", ans);return 0;
}//by wqs

思路解析

可以证明,如果边长为l的正方形不能分出K块,则变成为l + 1的正方形必定不能分出K块。
这是单调递增的,所以可以用二分枚举正方形的边长。

相关文章:

  • oracle判断同表同条件查出两条数据,根据长短判断差异
  • leetcode_344.反转字符串_java
  • CS5346 - CHARTS: Chart with Point / Bar / Line / Box
  • matlab中simulink的快捷使用方法
  • 用友U8在参照生产订单界面显示各个仓别的可用量
  • 机器学习03——K近邻
  • 【漫话机器学习系列】204.不确定性的来源(Sources Of Uncertainty)
  • 算力狂飙时代:解码2024年上海及周边区域IDC市场的三重构局
  • 神经网络模型应用到机器学习时的难点
  • 4.16学习总结
  • 数据中台(大数据平台)之数据资源目录
  • Redisson分布式锁深度解析:原理、源码与最佳实践
  • DAY09:【pytorch】nn网络层
  • Spring Boot 整合 Redis 实现点赞功能:从基础到实践
  • 2000-2017年各省原油消费量数据
  • 第2.4节:学会像AWK一样思考
  • 从标准九九表打印解读单行表达式的书写修炼(Python)
  • Linux:安装 CentOS 7(完整教程)
  • 环境一号卫星系列:HJ-1A + HJ-1B + HJ-1C 卫星详解
  • NLP高频面试题(四十五)——PPO 算法在 RLHF 中的原理与实现详解
  • 让网站降权/论坛推广
  • 杭州市住房与城乡建设部网站/种子搜索神器在线搜
  • 网站推广活动方案/网页设计案例
  • 专门做网站的公司/广西南宁做网站的公司
  • 大型网站的优化方法/seo排名优化推荐
  • 做网站标题头像/石家庄最新消息