当前位置: 首页 > article >正文

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();  // 读取输入的整数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


http://www.kler.cn/a/282230.html

相关文章:

  • Ubuntu 的 ROS 操作系统 turtlebot3 导航仿真
  • 【流量分析】常见webshell流量分析
  • SystemVerilog学习笔记(十一):接口
  • 【C++】红黑树封装map—set
  • shell脚本配置nginx
  • 【H3C华三 】VRRP与BFD、Track联动配置案例
  • Python 中的 `and`, `or`, `not` 运算符:介绍与使用
  • Linux进程间的通信(二)管道通信及其实际应用(主要是实际编程应用,底层涉及不太多,想了解底层参考《UNIX环境高级编程》)
  • C++ QT 单例模式
  • uniapp秋云图表报错json underfind的原因
  • 【C#】【EXCEL】Bumblebee/Components/Analysis/GH_Ex_Ana_CondBetween.cs
  • 《python语言程序设计》2018版第8章第6题统计字符串中的字母个数
  • C#实现文件的上传
  • 华为AR路由使用PPPoE获取IPv6地址上网
  • 软件工程基础知识(3)
  • 【C++】汇编分析
  • 【软件工程】软件工程
  • Oracle(87)如何判断是否需要重建索引?
  • 计算机毕业设计选题推荐-救援物资管理系统-Java/Python项目实战
  • numpy 中的降维与升维
  • 编程路上的“迷宫逃脱”:从Bug堆到算法之巅的奇妙之旅
  • Renesa Version Board和微信小程序通信
  • sqli-labsSQL手工注入第26-30关
  • scrapy--图片管道-ImagesPipeline
  • 第十五章、 Io流
  • 风控领域特征工程