原题链接:蓝桥杯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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复