好吧其实就是基本的二分答案。
#include<cstdio>
int n,k,a[100001];
int ans,mid,l,r;
void check()
{
int num=0;
for(int i=1;i<=n;i++)
{
num+=a[i]/mid;
}
if(num>=k)
{
ans=mid;
l=mid+1;
mid=(l+r)/2;
}
if(num<k)
{
r=mid;
mid=(l+r)/2;
}
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
r=r>a[i]?r:a[i];
}
l=1;
mid=(l+r)/2;
while(l!=r)
{
check();
}
printf("%d\n",ans);
return 0;
}