题目描述
解题思路
1.首先判断一个巧克力能切一个边长为x的正方形巧克力多少块的公式应该是:
(长//x)*(宽//x)而不是面积整除面积,因为可能存在1*60的巧克力你用面积算出来能切好多块2*2的但是实际上切不了。
2.尽可能切最大的巧克力,用二分查找在区间遍历会节省很多时间,因为如果给的数据太多你依次遍历有可能会超时。
3.二分查找条件就是如果当前这个mid能切那么就下一个循环既头结点=mid+1,依次这么判断,如果下一个循环不能切了就返回头节点-1也就是上一个结点。
代码
N,K=map(int,input().strip().split())
qiaokeli=[list(map(int,input().strip().split())) for _ in range(N)]
front,tail=1,100000
def find(edge):
global k#在该函数里k用全局变量
ans =0
for wid,hei in qiaokeli:
ans+=(wid//edge)*(hei//edge)#判断现在这个巧克力能切出多少个边长为edge的正方形巧克力
if ans>=K:
return True
return False
#二分查找
while front<=tail:#一定要加等号
mid=(tail+front)//2
if not find(mid):
#没找到说明要缩小边
tail=mid-1
else:
front=mid+1
print(front-1)#print(tail)没找到说明上一轮找到的是最大的