原题链接:蓝桥杯2023年第十四届省赛真题-平均
解题思路:
将我的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语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复