解题思路:
将我的Python代码给gpt翻译成Java即可。
注意事项:
注意int变成long,不然第九题是错的。
参考代码:
import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); long n = scanner.nextLong(); List<Map.Entry> tmp = new ArrayList<>(); // 创建一个列表用于存储键值对 for (long i = 0; i < n; i++) { long a = scanner.nextLong(); // 读取键值对中的键a long b = scanner.nextLong(); // 读取键值对中的值b tmp.add(new AbstractMap.SimpleEntry<>(a, b)); // 将读取的键值对加入列表 } Map<Long, List> dic = giveMeADict(tmp); // 调用函数生成字典 long ans = 0; // 初始化答案为0 for (List values : dic.values()) { ans += cost(values, n); // 对每个值列表计算代价并累加到答案上 } System.out.println(ans); // 打印最终答案 } public static Map<Long, List> giveMeADict(List<Map.Entry> lis) { Map<Long, List> dic = new HashMap<>(); // 创建一个字典 for (Map.Entry item : lis) { // 遍历列表中的键值对 if (!dic.containsKey(item.getKey())) { // 如果字典中不包含当前键 List valueList = new ArrayList<>(); // 创建一个值列表 valueList.add(item.getValue()); // 将值加入值列表 dic.put(item.getKey(), valueList); // 将键值对加入字典 } else { // 如果字典中包含当前键 dic.get(item.getKey()).add(item.getValue()); // 将值加入对应键的值列表 } } return dic; // 返回生成的字典 } public static long cost(List lis, long n) { if (lis.size() <= n / 10) { // 如果值列表长度小于等于n的十分之一 return 0; // 返回0,不需要额外代价 } Collections.sort(lis); // 对值列表进行排序 long sum = 0; // 初始化代价总和为0 for (long i = 0; i < lis.size() - n / 10; i++) { sum += lis.get((int)i); // 将前n的九分之一的值累加到代价总和上 } return sum; // 返回最终代价总和 } }
0.0分
2 人评分
C语言训练-排序问题<1> (C语言代码)浏览:588 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:1555 |
printf基础练习2 (C语言代码)浏览:955 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:1327 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:1090 |
完数 (C语言代码)浏览:757 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:582 |
用筛法求之N内的素数。 (C语言代码)浏览:595 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:748 |
马拦过河卒 (C语言代码)浏览:1213 |