题目
示例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(); // 读取输入的整数n
int m = sc.nextInt(); // 读取输入的整数m
int[] a = new int[n + 1]; // 创建整数数组a,长度为n+1
for (int i = 1; i <= n; i++)
a[i] = sc.nextInt(); // 读取n个整数并存入数组a
List<Integer>[] list = new ArrayList[m]; // 创建整数列表的数组list,长度为m
for (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