关于二分说一点小间接吧:
1.二分的题目一般是求最大值或者最小值,而且一定是存在某种意义上的递增。
2.找到要二分的东西(一般都是二分答案),确定好上界和下界,以及上界下界变动的条件。
3.二分的题目会卡精度,一点要仔细。
#include<bits/stdc++.h>
using namespace std;
int n,k,a[1000005],maxn;
double ans;
bool check(int flag)
{
int tmp = 0;
for(int i = 1;i <= n;++i)
{
tmp += a[i] / flag;
}
return tmp >= k;
}
int main()
{
cin >> n >> k;
for(int i = 1; i <= n; ++i)
{
double tmp;
cin >> tmp;
a[i] = tmp * 100;
if(a[i] > maxn)
maxn = a[i];
}
int left = 0;
int right = maxn;
while(left < right){
int mid = (left + right + 1) / 2;
if(check(mid))
left = mid;
else
right = mid - 1;
}
ans = left / 100.0;
cout << fixed << setprecision(2) << ans << endl;
return 0;
}