您的位置:首页 > 编程语言 > Java开发

Poj1064【二分查找】java题解

2018-02-06 22:53 337 查看
水题,可以熟悉下二分,附上java代码,需要注意的是最后要用floor函数保留两位小数,我还因此WA了几发QAQ

代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.text.DecimalFormat;
import java.util.Scanner;

public class Main {

static double[] l ;
static int n;
public static void main(String[] args) throws IOException {
StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
while(in.nextToken() != StreamTokenizer.TT_EOF){
n = (int)in.nval;
in.nextToken();
int k = (int)in.nval;
l = new double
;
for(int i = 0; i<n; i++){
in.nextToken();
l[i] = in.nval;
}
double left=0,right=100000;
for(int i = 0; i<100; i++){
double mid = (left+right)/2;
if(right(mid, k))
left = mid;
else right = mid;
}
DecimalFormat df = new DecimalFormat("0.00");
right = Math.floor(right*100)/100;
if(right(right, k)) out.println(df.format(right));
else out.println("0.00");
out.flush();
}

}
private static boolean right(double mid, int k) {
int tem = 0;
for(int i = 0; i<n; i++){
tem += (int)(l[i]/mid);
}
//此处是tem>=k返回true
if(tem >= k) return true;
return false;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: