低级算法:直接枚举:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL ans,n,k;
LL a[100005],b[100005],c;
int main()
{
cin>>n>>k;
for(int i=0;i<n;i++)
{
cin>>a[i]>>b[i];
c=max(c,min(a[i],b[i]));
}
long sum=0;bool flag=false;
for(int i=0;c>0;i++)
{
sum=0;
for(int j=0;j<n;j++)
{
if(a[j]>=c&&b[j]>=c)sum+=((a[j]/c) * (b[j]/c));
}
if(sum<k)c--;
if(sum>=k){
flag=true;
break;
}
}
if(flag)cout<<c;
else
cout<<-1;
}
改进算法:二分查找:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL ans,n,k;
LL a[100005],b[100005],c;
bool check(int x)
{ LL sum=0;
for(int i=