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;
}
}
代码:
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;
}
}
相关文章推荐
- POJ 1064 Cable master 二分查找
- POJ1064(二分查找)
- [POJ](1064)Cable master ---二分查找(查找)
- POJ 2413 : How many Fibs? - JAVA大数! / 二分查找+大数加法
- poj 1064 Cable master - 二分查找
- [POJ] 1064 Cable master (二分查找)
- POJ 1064 Cable master (二分查找_经典题!!!)
- poj 1064 二分查找变形—判定并找到可行解
- POJ 1064 Cable master [二分查找] 《挑战程序设计竞赛》3.1
- POJ 1064 Cable master(二分查找 求近似解)
- 二分查找算法java
- java实现 二分查找 非递归与递归2种方式
- poj1064 cable master(最大值问题:二分+贪心)
- 二分查找和递归@java
- POJ 1064 Cable master 二分
- POJ 1064 —— 二分
- [二分]poj 1064 Cable Master
- poj 2976 Dropping tests (01规划,二分查找)
- java递归实现二分查找
- Monthly Expense(POJ--3273【二分查找】