儿童节那天有 K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有 N块巧克力,其中第i块是HixWi的方格组成的长方形。为了公平起见,小明需要从这 N块巧克力中切出 K块巧克力分给小朋友们。切出的巧克力需要满足
1.形状是正方形,边长是整数。
2.大小相同。
例如一块6x5 的巧克力可以切出 6块2x2 的巧克力或者 2块 3x3 的巧克力。
当然小朋友们都希望得到的巧克力尽可能大,你能帮小Hi计算出最大的边长是多少么?
输入
第一行包含两个整数 和 。(1<N,K<10^5)
以下 行每行包含两个整数 和 1<Hi,W_i<10^5)。
输入保证每位小朋友至少能获得一块1x1的巧克力。
输出
输出切出的正方形巧克力最大可能的边长。
#include<bits/stdc++.h>
using namespace std;
int n,k,l,r,mid,cnt,ans;
struct st{
int a,b;
}a[100005];
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i].a>>a[i].b;
r=max(max(a[i].a,a[i].b),r);
}
while(l<r){
mid=l+r>>1,cnt=0;
for(int i=1;i<=n;i++){
cnt+=(a[i].a/mid)*(a[i].b/mid);
}
if(cnt>=k)l=mid+1,ans=mid;else r=mid;
// cout<<mid<<' '<<cnt<<endl;
}
cout<<ans;
return 0;
}