https://ac.nowcoder.com/acm/problem/23049
题意:被给予n根木棍,华华需要k根,华华可以将每根木棍裁剪成若干段自己想要的长度,并丢掉多余的部分,华华不知道裁剪成多长比较好,所以干脆越长越好。不过由于华华有点强迫症,所以他希望长度为非负整数。
思路:二分寻找长度
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1000000007
int a[200005];
int n, k;
int fun(int z)
{
ll s=0;
for(int i=0;i<n;i++)
{
s=s+a[i]/z;
}
if(s>=k)
{
return 1;
}
return 0;
}
int erfen(int l,int r)
{
while(r-l>1)
{
int z=(l+r)/2;
if(fun(z))
{
l=z;
}
else
{
r=z;
}
}
return l;
}
int main()
{
scanf("%d %d",&n,&k);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int z=erfen(0,1000000001);
printf("%d\n",z);
return 0;
}

京公网安备 11010502036488号