题目描述
二分的关键在于二分什么,(题目给出的条件)
有边界的确定一般是题目中给出的最大值,有的时候采用输入数据中的最值也可以通过,但是建议采用题目条件给出的最值!!!
算法1
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
/**
* @param args
* @throws IOException
*/
public static int n,m,a[]=new int [100010];
public static boolean check(double mid) {
int sum=0;
for(int i=0;i<n;i++){
sum+=a[i]/mid;
}
if(sum<m) return true;
else{
return false;
}
}
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(System.in));
String p[]=bufferedReader.readLine().split(" ");
n=Integer.parseInt(p[0]);
m=Integer.parseInt(p[1]);
a=new int [n];
int ma=0;
p=bufferedReader.readLine().split(" ");
for(int i=0;i<n;i++){
a[i]=Integer.parseInt(p[i]);
ma=Math.max(ma,a[i]);
}
double l=0;
double r=ma;
while(r-l>1e-4){
double mid=(l+r)/2;
if(check(mid)){
r=mid;
}else {
l=mid;
}
}
System.out.printf("%.2f",r);
}
}