题目一
Cable master
有N条绳子,它们的长度分别为Li,如果从它们中切割出K条长度相同的绳子,这K条绳子每条最长能有多长?答案保留到小数点后两位
样例输入:
N=4
K=11
L={8.02, 7,43, 4.57, 5.39}
样例输出
2.00
看到精确度就可以猜到了,可以用实数域二分,
代码如下,思路很简单
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
static int N,K;
static float[] L = new float[10000];
static float sum;
static boolean C(float x) {
int cnt = 0;
for(int i=0; i<N; i++) {
cnt += (int)L[i]/x;
}
return cnt>=K;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
N = in.nextInt();K = in.nextInt();
for(int i=0; i<N; i++) {
L[i] = in.nextFloat();
sum +=L[i];
}
float low = 0;
float high = sum;
float mid = low;
for(int i=0; i<100; i++) {
mid = (low+high)/2;
if(C(mid))low = mid;
else high=mid;
}
BigDecimal bd = new BigDecimal(low);
System.out.println(bd.setScale(2,BigDecimal.ROUND_HALF_UP));
}
}