欢迎光临散文网 会员登陆 & 注册

【蓝桥杯学习记录】分巧克力

2022-03-25 16:52 作者:长舟泛歌  | 我要投稿

一、题目

儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有N块巧克力,其中第i块是 Hi ×Wi 的方格组成的长方形。为了公平起见,小明需要从这 N 块巧克力中切出 K 块巧克力分给小朋友们。切出的巧克力需要满足:
1.形状是正方形,边长是整数;
2.大小相同;
例如一块 6x5 的巧克力可以切出 6 块 2x2 的巧克力或者 2 块 3x3 的巧克力。当然小朋友们都希望得到的巧克力尽可能大,你能帮小明计算出最大的边长是多少么?
第一行包含两个整数N,K
以下 N 行每行包含两个整数 H_i,W_i
输出切出的正方形巧克力最大可能的边长。

二、解题思路

循环边长,开始采用的是边长从2到100000,但是会超时,所以用二分查找。

画图可知(如图一),每一块巧克力的长和宽除以边长再乘起来就是这块巧克力再这个边长下可以分出来的块数,

图1

所以再循环每个巧克力,将分出来的块数相加,如果大于K(小孩子的人数),那么就可以,设置一个imax接收这个值,然后再去找更大的值,即让first=mid+1,直到找到最大。否则tail=mid-1,去看看小的数里面有没有满足条件的

三、完整代码

四、出现问题

出现的问题就是开始没想到二分查找,还有就是二分查找的时候将tail=mid-1写的tail=mid,导致循环无法退出,还有一个问题是开始想让tail=每个巧克力长和宽中的最大值,但是我把tail=max(H[i],W[i])写到了接收巧克力长和宽的循环里,这样肯定是不对的,tial应该再和tail的值再作比较。



【蓝桥杯学习记录】分巧克力的评论 (共 条)

分享到微博请遵守国家法律