bing


私信TA

用户名:whutBing

访问量:483

签 名:

等  级
排  名 15305
经  验 844
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校 武汉理工大学
专  业

  自我简介:

TA的其他文章

解题思路:
第一步,先给数组排好序。

第二步,在这个数组,怎么按照题目思路,给定一个和m龙头的映射。是新建m个数组?

No,就在原有数组上做文章。

第三步,对单独一个桶,怎么处理累计时间。很容易发现,对一个龙头 arr[ 1 , 2, 3 ,4]

第一个不用等(0),第二个要等的是,前一个人的用时(1)。第三个要等的是,前两个用时和(1+2)。依次类推。


注意事项:

处理好边界!!!
巧妙处理累计,见代码。


参考代码:


import java.util.Arrays;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int m = scanner.nextInt();
		int[] arr = new int[n];
		for (int i = 0; i < n; i++) {
			arr[i] = scanner.nextInt();
		}
		Arrays.sort(arr);

		int sum = 0;
		// m个水龙头
		for (int i = 0; i < m; i++) {
			int length = (int) Math.ceil((double) (n - i) / m);
			// 每个水龙头等待的人
			int index = i;
			for (int j = 0; j < length - 1; j++) {
				// 累计时间
				sum += (length - 1 - j) * arr[index];
				index = index + m;
			}
		}
		System.out.println(sum);
	}

}


 

0.0分

3 人评分

  评论区

  • «
  • »