题目链接:
题目描述
儿童节那天有 K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。
小明一共有 N 块巧克力,其中第ii 块是 Hi×Wi 的方格组成的长方形。为了公平起见,
小明需要从这 N 块巧克力中切出 K 块巧克力分给小朋友们。切出的巧克力需要满足:
- 形状是正方形,边长是整数;
- 大小相同;
例如一块 6x5 的巧克力可以切出 6 块 2x2 的巧克力或者 2 块 3x3 的巧克力。
当然小朋友们都希望得到的巧克力尽可能大,你能帮小明计算出最大的边长是多少么?
编辑
输出描述
输出切出的正方形巧克力最大可能的边长。
输入输出样例
示例
输入
2 10 6 5 5 6
输出
2
运行限制
- 最大运行时间:2s
- 最大运行内存: 256M
题目代码:
import java.util.*; public class 分巧克力 { static int n=0; static int k=0; static int [] wi=new int [100010]; static int [] hi=new int [100010]; static boolean check(int mid){ int res=0; for(int i=1;i<=n;i++){ res+=(wi[i]/mid)*(hi[i]/mid); } if(res<k){ return false; } return true; } public static void main(String [] args) { Scanner scan = new Scanner(System.in); n=scan.nextInt();//n个巧克力 k=scan.nextInt();//k个朋友 for(int i=1;i<=n;i++){ wi[i]=scan.nextInt(); hi[i]=scan.nextInt(); } int l=1; int r=10005; while(l<=r){ int mid=(l+r)/2; if(check(mid)){ //如果当前的mid满足可以分给k个小朋友 那么就说明mid的值还可以更大 //所以答案再mid的右边 l=mid+1; }else{ r=mid-1; } } System.out.println(l-1); } }