有n个巧克力,所有的巧克力都是厚度一样的正方形的巧克力板,这n个巧克力板的边长分别为a1 ,a2,……an,因为都是厚度一致的正方形巧克力板,我们认为第i个巧克力的重量为ai 的平方,我现在准备挑选一个合适大小的包来装尽可能多的巧克力板,输入描述:第一行两个整数n和m,表示巧克力数量和询问数量,第二行n个整数a1 ,a2……..an,表示n块正方形巧克力板的边长,第三行m个整数q1,q2,….qm,第i个整数qi表示询问:如果我选择一个能装qi重量的包,最多能装多少块巧克力板?输出描述:输出一行m个整数,分别表示每次询问的答案。请写出这道算法题目的Java 代码
时间: 2023-05-29 11:01:09 浏览: 188
巧克力王国信息网页模板
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[] chocolate = new int[n];
for (int i = 0; i < n; i++) {
chocolate[i] = sc.nextInt();
}
Arrays.sort(chocolate); // 排序
int[] sum = new int[n];
sum[0] = chocolate[0] * chocolate[0]; // 计算前缀和
for (int i = 1; i < n; i++) {
sum[i] = sum[i - 1] + chocolate[i] * chocolate[i];
}
for (int i = 0; i < m; i++) {
int q = sc.nextInt();
int l = 0, r = n - 1, ans = 0;
while (l <= r) { // 二分查找
int mid = (l + r) / 2;
if (sum[mid] <= q) {
ans = mid + 1;
l = mid + 1;
} else {
r = mid - 1;
}
}
System.out.println(ans);
}
}
}
阅读全文