小明有 n根木棍,第 i根木棍的长度为Li。现在想要切出 k 根长度一样的木棍,每一根最长是多少呢?
输入第一行一个整数n。
第二行 n个整数 Li。
第三行一个整数 k。
输出一行一个实数,表示要切出 k 根长度一样的木棍,每一根木棍最长的长度。相对误差或绝对误差不超过 10的−9次方就算正确。
为什么TLE啊啊啊!(此题十分像P1577 切绳子,但精度不同)
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 2 * 1e5 + 10;
int n,k; double a[N],l,r,mid;
bool check(double x){
int tot = 0;
for(int i = 1;i <= n;i++){
tot += floor(a[i] / x);
}
return tot >= k;
}
int main(){
cin >> n;
for(int i = 1;i <= n;i++){
cin >> a[i];
r = r + a[i];
}
cin >> k;
while(r - l > 1e-9){
mid = (l + r) / 2;
if(check(mid)) l = mid;
else r = mid;
}
printf("%.9lf",mid);
return 0;
}
为什么TLE啊啊啊!