华为OD2023(A卷)基础题37【工单调度策略】

2023-10-26

工单调度策略

 题目描述

  • 当小区通信设备上报警时,系统会自动生成待处理的工单,工单调度系统需要根据不同的策略,调度外线工程师(FME)上站去修复工单对应的问题。

  • 根据与运营商签订的合同,不同严重程度的工单被处理并修复的时长要求不同,这个要求被修复的时长我们称之为SLA时间。

  • 假设华为与运营商A签订了运维合同,部署了一套调度系统,只有1个外线工程师(FME),每个工单根据问题严重程度会给一个评分,在SLA时间内完成修复的工单,华为员工获得工单对应的积分,超过SLA完成的工单不获得积分,但必须完成该工单,运营商最终会根据积分付款。

  • 请设计一种调度策略,根据现状得到调度结果完成所有工单,让这个外线工程师处理的工单处理的工单获得的总积分最多。

  • 假设从某个调度时刻开始,当前工单数量N,不会产生新的工单,每个工单处理修复耗时为1小时。请设计你的调度策略,完成业务目标。

  • 不考虑外线工程师在小区之间行驶的耗时。


输入

  • 第一行为一个整数N,表示工单的数量。

  • 接下来N行,每行包括两个整数,第一个整数表示工单的SLA时间(小时),第二个数表示工单的积分。

输出

  • 输出一个整数表示可以获得的最大积分。

 

import java.util.*;

/**
 * 
 * 这个工单调度策略的思路是,将所有工单按照评分从大到小排序,然后遍历每个工单,尝试将其分配给外线工单程师进行修复。
 * 为了保证在SLA到期完成修复,我们需要维护一个优先队列(堆)仓库可用的时间,即已经完成其他工单还剩余来的时间。
 * 如果当前工单的SLA时间小于等于可用的时间时间的轻轻的,则可以将其分配给外线工程师进行修复,并且更新可用时间完成。
 * 否则,需要等待直到有足够的可用时间。如果遍历完所有工单后,仍有剩余的可用时间,则可以继续完成完成工单,但不会获得统计的积分。
 * 最终输出总共获得的积分即可。
 * <p>
 * 注意,这个算法的时间复杂度为O(nlogn),因为需要进行一次排序操作,并且每次插入和删除元素时需要调整堆的结构。
 */
public class OdAb37 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt(); // 工单数量
        int[][] orders = new int[n][2]; // 二维数组存储每个工单的SLA时间和积分
        for (int i = 0; i < n; i++) {
            orders[i][0] = scanner.nextInt();
            orders[i][1] = scanner.nextInt();
        }

        Arrays.sort(orders, (a, b) -> { // 按照工单的评分从大到小排序
            return b[1] - a[1];
        });

        PriorityQueue<Integer> pq = new PriorityQueue<>(); // 使用优先队列(堆)存储可用的时间
        int time = 0; // 当前时间
        int points = 0; // 总共获得的积分
        for (int i = 0; i < n; i++) {
            int sla = orders[i][0]; // 当前工单的SLA时间
            int score = orders[i][1]; // 当前工单的评分
            if (pq.size() < sla) { // 如果可用时间不够当前工单的SLA时间,则需要等待
                pq.offer(sla); // 将该SLA时间加入队列
                points += score; // 能够修复该工单,获得对应积分
            } else if (pq.peek() > sla) { // 如果队列中最小的SLA时间比当前工单的SLA时间大,则可以修复该工单
                int availableTime = pq.poll(); // 取出可用的最小SLA时间
                pq.offer(sla); // 将该SLA时间加入队列
                points += score; // 能够修复该工单,获得对应积分
                time -= availableTime - sla; // 更新当前时间
            } else { // 如果队列中已有的可用时间都比当前工单的SLA时间小,则无法修复该工单,不获得积分
                continue;
            }
            time++; // 完成一个工单,更新当前时间
        }

        System.out.println(points); // 输出总共获得的积分
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

华为OD2023(A卷)基础题37【工单调度策略】 的相关文章

随机推荐

  • 互联网摸鱼日报(2023-03-08)

    互联网摸鱼日报 2023 03 08 InfoQ 热门话题 两会热点讨论 如何帮助中小企业在数字化时代不掉队 转型调研 鼎新汇 企业行 第一站 走进中国联通软件研究院 为什么你的大多数监控策略都失败了 ChatGPT等AI很强大 但为什么还
  • python是一门面向过程的语言_day5-python之面向过程编程

    import os def init func def wrapper args kwargs g func args kwargs next g return g return wrapper 第一阶段 找到所有文件的绝对路径 init
  • 腾讯云轻量应用服务器使用教程_创建_连接_建站

    腾讯云轻量应用服务器怎么使用 轻量应用服务器使用包括快速创建轻量服务器 轻量服务器远程连接 使用轻量应用服务器搭建网站教程 轻量服务器开通端口教程等 腾讯云服务器网整理了关于腾讯云轻量应用服务器的使用教程 目录 一 创建轻量应用服务器 二
  • 71-C语言-逆序拼接两个字符串

    问题 拼接字符串 拼接的那个字符串 需要先拼接 再连接 思路 两个字符数组 先创建出来并赋值 计算字符串的长度 随后弄两个指针 在一个for循环中 进行添加赋值 第一个数组从字母串末尾开始 然后让另一个数组的末尾处值给值到第一个数组中 随后
  • iperf使用方法windows_iperf3使用方法详解

    iperf3是一款带宽测试工具 它支持调节各种参数 比如通信协议 数据包个数 发送持续时间 测试完会报告网络带宽 丢包率和其他参数 小广告 欢迎喜欢网络技术的朋友加我微信 xfiles sky 一起学习 一 安装 操作系统 Ubuntu20
  • 常用的边缘算子

    边缘算子 边缘算子 sobel Roberts Prewitt Canny Laplacian 对比 边缘算子 参考链接 https blog csdn net yato0514 article details 82051790 图像方面的
  • 【PS CS6】替换证件照背景色

    参考链接 如何用PS替换证件照的背景色 1 首先把你需要处理的证件照片在ps软件里打开 裁剪到合适的位置大小 然后CTRL J 复制一个图层 2 选中复制的图层 然后在工具栏里选择快速选择工具 3 用快速选择工具选中证件照的白色背景 这里需
  • elasticsearch批量插入数据的时候出现java.net.SocketTimeoutException: 30,000 milliseconds timeout on connection

    问题 elasticsearch每次都批量插入几万数据量 然后就会出现下列问题 看这个问题应该是配置的问题 ERROR https jsse nio 443 exec 4 2020 07 09 23 31 54 EsMiniDaansouD
  • 变分(Calculus of variations)的概念及运算规则(一)

    文章目录 1 回顾 微分的定义 2 泛函和变分概念简介 2 1 泛函概念简介 2 2 变分概念简介 3 变分的运算法则简介 4 变分法详述 4 1 历史 4 2 极值 5 变分的运算法则详述 5 1 定义 5 1 1 泛函导数 5 1 2
  • feign使用get请求无法传递对象类型参数解决

    SpringQueryMap是微服务之间调用 使用openfeign通过get请求方式来处理 多入参 也就是通过实体来传参 情况的注解 多用于restful风格方式 作用 SpringQueryMap 简单来说就是将实体转化为表单数据 比如
  • 主析取范式和主合取范式

    主析取范式 小项 是n个命题变元的合取式 其中每个变元必出现且仅出现一次 以本身或否定形式 称这个合取式为小项 例 含有两个变元的小项 P Q P Q P Q P Q 若有n个变元 则有2的n次方个小项 小项编码 含有n个变元的小项的角标用
  • JAVA递归查询根据当前节点查询所有子节点

    public List
  • 数据库从入门到精通01

    文章目录 数据库应用 概念 什么是数据库 关系型和非关系型 关系型数据库 Mysql数据库 MySQL数据存放在哪里 MySQL服务端 MySQL客户端1 DOS窗口 MySQL客户端2 可视化工具 数据库的结构 数据库结构 SQL语句 定
  • python实用脚本(六)—— pandas库的使用(生成、读取表格)

    本期主题 python的pandas使用 往期链接 python实用脚本 一 批量修改目标文件夹下的文件名 python实用脚本 二 使用xlrd读取excel python实用脚本 三 通过有道智云API实现翻译 python实用脚本 四
  • 2021年全国职业院校技能大赛 “大数据技术与应用”—模拟赛题(一)

    2021年全国职业院校技能大赛 大数据技术与应用 模拟赛题 一 文章适合了解大数据技术与应用技能大赛 赛题 文章在编写过程中难免有疏漏和错误 欢迎大佬指出文章的不足之处 更多内容请点进 Lino White 查看 未来的世界充满着各式各样的
  • vscode的“安装”、“软件中文化”、“代码格式化”和“前端边编程边看到效果”的过程设置方法

    本文主要用来对vscode进行基础设置 通篇看起来偏过程化 最好从头到尾一步一步跟着设置 目录 一 安装vscode 二 安装 Chinese 插件 使软件中文化 三 安装软件主题 使软件界面个性化 四 将一个文件目录作为项目目录打开 五
  • Matlab:尝试将 SCRIPT XXX 作为函数执行的解决方案

    Matlab 尝试将 SCRIPT XXX 作为函数执行的解决方案 最近在做图像处理小实验的过程中遇到了无比沙雕的情况 被自己佛了 最近真的智商不在线 或者没在线过 先描述一下问题 在Matlab中调用直方图均衡化函数histeq 但是出现
  • 进程、线程相关基础理论总结

    进程 线程相关基础理论 一 进程与线程的区别 1 进程是指一个程序在计算机中的一次运行 它是资源分配的最小单位 2 线程是进程中调度执行的最小单位 3 进程有独立的内存空间 线程没有独立的内存空间 它必须运行在进程中 4 线程之间通信更方便
  • Runnable可以实现资源共享但Thread不能实现资源共享的原因

    转自 http blog csdn net javaniceyou article details 6859305 线程的两种实现方式 通过实现Runnable接口的线程方式可以实现资源的共享 而继承Thread则不可以 原因何在 先看下面
  • 华为OD2023(A卷)基础题37【工单调度策略】

    工单调度策略 题目描述 当小区通信设备上报警时 系统会自动生成待处理的工单 工单调度系统需要根据不同的策略 调度外线工程师 FME 上站去修复工单对应的问题 根据与运营商签订的合同 不同严重程度的工单被处理并修复的时长要求不同 这个要求被修