本文主要是介绍OJ-0829,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
示例1
输入:
5 4
1
1
2
3
5
1 2 3
1 4
3 4 5
2 3 4
输出:
3
4
1
2
说明:测试用例的优先级计算如下:
T1=Pf1+Pf2+Pf3=1+1+2=4
T2=Pf1+Pf4=1+3=4
T3=Pf3+Pf4+Pf5=2+3+5=10
T4=Pf2+Pf3+Pf4=1+2+3=6
按照优先级从小到大,以及相同优先级,ID小的先执行的规则,执行顺序为T3,T4,T1,T2
示例2
输入:
3 3
3
1
5
1 2 3
1 2 3
1 2 3
输出:
1
2
3
说明:测试用例的优先级计算如下:
T1=Pf1+Pf2+PF3=3+1+5=9
T2=Pf1+Pf2+PF3=3+1+5=9
T3=Pf1+Pf2+PF3=3+1+5=9
每个优先级一样,按照ID从小到大执行,执行顺序为T1,T2,T3
题解
import java.util.PriorityQueue;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int m = in.nextInt();int[] f = new int[n];for (int i = 0; i < n; i++) {f[i] = in.nextInt();}in.nextLine();PriorityQueue<Test> tests = new PriorityQueue<>((o1, o2) -> o1.pri == o2.pri ? o1.id - o2.id : o2.pri - o1.pri);for (int i = 0; i < m; i++) {String[] ts = in.nextLine().split(" ");int pri = 0;for (String s : ts) {pri += f[Integer.parseInt(s) - 1];}tests.add(new Test(i + 1, pri));}while (!tests.isEmpty()) {System.out.println(tests.poll().id);}}static class Test {int id;int pri;public Test(int id, int pri) {this.id = id;this.pri = pri;}}
}
参考
import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in); // 创建Scanner对象用于接收输入int n = sc.nextInt(); // 读取输入的整数nint m = sc.nextInt(); // 读取输入的整数mint[] a = new int[n + 1]; // 创建整数数组a,长度为n+1for (int i = 1; i <= n; i++)a[i] = sc.nextInt(); // 读取n个整数并存入数组aList<Integer>[] list = new ArrayList[m]; // 创建整数列表的数组list,长度为mfor (int i = 0; i < m; i++)list[i] = new ArrayList<>(); // 初始化数组list的每个元素为一个空的整数列表sc.nextLine(); // 读取换行符,准备读取下一行输入for (int i = 0; i < m; i++) {String s = sc.nextLine(); // 读取一行字符串int[] arr = Arrays.stream(s.split(" ")).mapToInt(Integer::parseInt).toArray(); // 将字符串按空格分割并转为整数数组for (int j = 0; j < arr.length; j++)arr[j] = a[arr[j]]; // 将整数数组arr中的每个元素替换为数组a中对应索引的值int sum = Arrays.stream(arr).sum(); // 计算整数数组arr的和list[i].add(sum); // 将和添加到数组list的第i个元素中list[i].add(i + 1); // 将i+1添加到数组list的第i个元素中}Arrays.sort(list, (o1, o2) -> { // 对数组list进行排序if (o1.get(0) != o2.get(0))return o2.get(0) - o1.get(0);return o1.get(1) - o2.get(1);});for (int i = 0; i < m; i++)System.out.println(list[i].get(list[i].size() - 1)); // 输出数组list的第i个元素的最后一个值}
}
https://blog.csdn.net/weixin_52908342/article/details/135415370
这篇关于OJ-0829的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!