儿童节那天有 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;
}