二分即可
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int,int> P;
const int N=1e5+9;
#define line '\n'
inline int read(){int x=0,op=1;char c=getchar();while(!isdigit(c)){if(c=='-')op=-1;c=getchar();}while(isdigit(c))x=x*10+c-48,c=getchar();return x*op;}
int n,k,h[N],w[N];
bool judge(int x)
{
int num=0;
for(int i=1;i<=n;++i)
num+=w[i]/x*(h[i]/x);
return num>=k;
}
int main()
{
n=read(),k=read();
for(int i=1;i<=n;++i)h[i]=read(),w[i]=read();
int L=1,R=100000,mid,ans=0;
while(L<=R){
mid=L+(R-L)/2;
if(judge(mid))ans=mid,L=mid+1;
else R=mid-1;
}
cout<<ans<<line;
return 0;
}原文:https://www.cnblogs.com/ZeroOne-World/p/12383412.html