华为OD机试【优选核酸检测点】【2022.11 Q4 新题】

news2024/11/25 12:51:38

图片出自:华为机试真题 Java 实现【优选核酸检测点】【2022.11 Q4 新题】_寻找核酸检测点java_MISAYAONE的博客-CSDN博客

首先这是一道很恶心的题目。题目信息量大,逻辑分支多,还有各种细节上的坑。

本着死磕精神,耗时2h+,总算是撸完了代码(ps:时间不充裕禁入)。

结果发现和答主的代码有出入,并自认为自己的方法更合理一些,贴出代码,欢迎批评交流共同进步。

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] now = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();

        int[] finish = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();

        int n = Integer.parseInt(sc.nextLine());
        int[][] check_points = new int[n][];
        for (int i=0;i<n;i++){
            check_points[i] = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        }
        // Queue<<id,useTime,money>>
        Queue<List<Integer>> result_set = new PriorityQueue<>((a,b)->{
            int ret = a.get(1) -b.get(1);
            if (ret == 0){
                int ret1 = a.get(2) -b.get(2);
                if (ret1==0){
                    return a.get(0) - b.get(0);
                }
                return ret1;
            }
            return ret;
        });
        int now_hour = now[0];
        int available_time = timeDiff(now,finish);
        if(finish[0]>20){
            available_time = available_time-timeDiff(new int[]{20,0},finish);
        }
        if (now[0]<8){
            available_time = available_time-timeDiff(now,new int[]{8,0});
        }
        for(int i=0;i<check_points.length;i++){
            int[] check_point = check_points[i];
            int id = check_point[0];
            int distance = check_point[1];
            int peoples = check_point[2];
            if (available_time<=0){
                continue;
            }
            int useTime = 0;
            if(now_hour<8){// 早于8点,从8点起算
                int start_to_8 = timeDiff(now,new int[]{8,0});// 时间差值
                if (10*distance <= start_to_8){//8点前到达,以下类比,不重复注释
                    useTime = 10*distance + peoples;//可以在8点前到达,8点到,直接取 路程耗时+排队人数
                }else{//8点后到达,以下类比,不重复注释
                    useTime = 10*distance + (10*distance-start_to_8) * 2 + peoples;//路程耗时+增加排队人数+原有排队人数
                }
            }else if (now_hour<10){
                int start_to_10 = timeDiff(now,new int[]{10,0});
                if(10*distance<=start_to_10){
                    useTime = 10*distance*3 +peoples;//10点以前到达, 10*dis + 2*10*dis + peo
                }else{
                    useTime = start_to_10*3+peoples;//10*dis + start_to*2 + peo - (10*dis-start_to)
                }
            }else if (now_hour < 12){
                int start_to_12 = timeDiff(now,new int[]{12,0});
                if (10*distance<=start_to_12){
                    useTime = Math.max(peoples, 10 * distance);
                }else{
                    if(peoples<=start_to_12){//判断行程中,point原有队列是否消耗完
                        useTime=10*distance + 9*(10*distance-start_to_12);// 12点后,没有遗留的队友
                    }else{
                        useTime=10*distance + 9*(10*distance-start_to_12) + (peoples-start_to_12);//有遗留的队友
                    }
                }
            }else if (now_hour < 14){
                int start_to_14 = timeDiff(now,new int[]{14,0});
                if (10*distance<=start_to_14){
                    useTime=100*distance+peoples;//10*dis + 9*10*dis + peo;
                }else{
                    useTime=10*start_to_14 +peoples;// 10*dis + 9*start_to + peo - (10*dis-start_to)
                }
            }else if(now_hour < 20){
                useTime = Math.max(10 * distance, peoples);
            }else{
                continue;
            }
            if (useTime>available_time){
                continue;
            }
            result_set.offer(Arrays.asList(id,useTime,10*distance));
        }
        System.out.println(result_set.size());
        result_set.stream().map(l->l.stream().map(String::valueOf).reduce((a,b)->{return a+" "+b;}).get()).forEach(System.out::println);
    }

    /**
     * time2-time1
     * @param time1
     * @param time2
     * @return
     */
    public static int timeDiff(int[] time1,int[] time2){
        return (time2[0]-time1[0])*60 + time2[1] -time1[1];
    }

相关总结:

考查信息处理能力,逻辑分析能力。本题核心在于对多时段用时变化的处理,因此如何处理时间非常重要。常见的方案有:1.统一换成以每天0点为起点的整数分钟时间(“引用答主” 用的此方案);2.针对特定情况封装相应的时间处理函数,本题中要求输出的耗时单位为分钟,但给出的时间是数组([hour,minute]),因此,简单封装了一个函数 timeDiff(int[],int[]),转换格式并输出分钟时间差。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1097662.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

港联证券:四上市险企 前三季保费近1.8万亿

近日&#xff0c;跟着今年前9个月保费数据相继发表&#xff0c;各上市险企前三季度成果表现也得以一窥终究。数据闪现&#xff0c;我国人寿、我国人保、我国安全、众安在线4家上市险企共完结原保险保费收入&#xff08;下同&#xff09;1.78万亿元&#xff0c;同比添加6.09%。 …

预约按摩app软件开发定制足浴SPA上们服务小程序

同城按摩小程序是一种基于地理位置服务的小程序&#xff0c;它可以帮助用户快速找到附近的按摩师&#xff0c;并提供在线预约、评价、支付等功能。用户可以通过手机或者其他移动设备访问同城按摩小程序&#xff0c;实现足不出户就能预约到专业的按摩服务。 一、同城按摩小程序的…

2023年中国无创呼吸机产销量、竞争现状及行业市场规模分析[图]

医用呼吸机也被称之为机械通气&#xff0c;又能细分为无创机械通气&#xff08;NIV&#xff09;和有创机械通气&#xff08;IMV&#xff09;两种&#xff0c;即无创呼吸机和有创呼吸机。无创呼吸机又称气道正压通气呼吸机&#xff0c;它是一种以非创伤方式通过口鼻为使用者提供…

智能化安全巡更巡查系统—提升安全管理效率

传统的巡检都是手工完成&#xff0c;记录、拍照&#xff0c;回到办公室打印表单再交给作业队伍整改&#xff0c;再去现场核实复查&#xff0c;流程繁琐&#xff0c;效率低。而且大部分工地为了减少麻烦&#xff0c;人员往往都是口头沟通&#xff0c;存在很大质量风险&#xff0…

计网第六章(应用层)(四)(电子邮件)

目录 1、三个构成 2、基本过程 3、具体实现过程 4、 电子邮件 4.1 简单邮件传送协议SMTP 4.2电子邮件的信息格式 4.3多用途因特网邮件扩展MIME 4.4邮件读取协议 4.5基于万维网的电子邮件 电子邮件采用客户/服务器的方式。 1、三个构成 电子邮件系统的三个组成构件&a…

echarts 柱状折线图(折叠柱状图)月年汇总

echarts柱状折线图 前几项是按月计算&#xff0c;最后一列是年份这种情况如何实现呢&#xff1f; 如下图 或者 代码如下&#xff1a; 图一代码&#xff1a; <e-charts :option"option5" class"chart7"></e-charts>const option5 {tool…

Python数据分析实战-二维数组转一维数组的几种方法总结(附源码和实现效果)

实现功能 二维数组转一维数组的几种方法。 实现代码 import numpy as np# 二维数组 array_2d np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])# 法1&#xff1a;将二维数组转换为一维数组 array_1d array_2d.flatten() print(法1&#xff1a;, array_1d)# 法2&#xff1a;将二…

揭秘成熟互联网团队:团队成员包括哪些岗位?

文章目录 &#x1f34a; 岗位&#x1f389; 1. 产品经理&#x1f389; 2. UI/UX设计师&#x1f389; 3. 前端工程师&#x1f389; 4. 后端工程师&#x1f389; 5. 数据分析师&#x1f389; 6. 运营专员&#x1f389; 7. 测试工程师&#x1f389; 8. 项目经理&#x1f389; 9. 运…

个人轻博客PHP开源系统/溯雪Sxlog轻博客源码/洁干净轻/占内存极低/php源码

源码简介&#xff1a; 溯雪(sxlog)它是一款很简洁越低内存的轻博客程序&#xff0c;整个程序包不到200KB&#xff0c;占内存极小&#xff0c;比一张照片都要小很多。简洁高效&#xff0c;占用空间内存极小&#xff0c;而且它不依赖任何数据库&#xff0c;不依赖富文本编辑器&a…

高效PPT制作与演示技巧大揭秘

PPT是职场必备技能&#xff0c;尤其在商务活动中&#xff0c;企业宣传、项目提案、路演宣讲……都需要用好PPT。然而&#xff0c;很多人的PPT效率低、效果差&#xff0c;客户不认可、老板不满意。 PPT不仅是办公软件&#xff0c;更是以汇报对象为中心、以共同的目标为导向、以…

Spring AOP归纳与总结

前言 AOP的核心思想是面向切面编程。AOP规范定义了多种概念&#xff0c;常用的aop框架有spring aop和AspectJ&#xff0c;两者功能和性能差异较大&#xff0c;现在默认的AOP框架是AspectJ&#xff0c;下面逐渐归纳其相关概念、功能及实现原理。 1. 概念 1. 切面&#xff1a;…

抖音直播招聘报白通过率是百分之99劳务公司报白有哪些好处?

首先抖音已经成为短视频流量最大的平台&#xff0c;抖音日活用户8亿&#xff0c;但是短视频招聘的企业不足300家&#xff0c;能直播招聘的不企业或者人力资源公司只有8000家&#xff0c;根据这些数据我们就能看到抖音招聘领域有巨大的空间&#xff0c;是以后的朝阳产业。 抖音…

网卡介绍篇

目录 1.什么是网卡&#xff1f; 2.网卡的演进 3.网卡的主要功能 4.服务器网卡介绍 5.服务器网卡的分类 6.网卡接口介绍 7.业界网卡主流厂商 8.SmartNIC概念介绍 9.SmartNIC产业发展趋势 10.SmartNIC实现 10-1.实现形式 10-2.SmartNIC不同实现技术对比 11.Mellanox…

Redis常见面试题总结

Redis(Remote Dictionary Server) 由Salvator Sanfilippo在2009年开源的使用 ANSI C 语言编写、高性能、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库&#xff0c;并提供多种语言的 API 的非关系型数据库。 与传统数据库不同的是 Redis 的数据是存…

一百八十九、ClickHouse——在海豚调度器中执行ClickHouse建库建表语句

一、目的 由于Hive处理好的结果数据要同步到ClickHouse中&#xff0c;因此需要在在海豚调度器中执行ClickHouse的ADS层的建库建表语句 二、执行步骤 &#xff08;一&#xff09;情形一&#xff1a;ClickHouse和海豚在同一服务器上 1、直接在海豚中创建执行SQL文件脚本的工作…

ESD接地实时监控在工业生产中的作用是什么

ESD&#xff08;静电放电&#xff09;接地实时监控在工业生产中起着非常重要的作用。ESD是一种静电现象&#xff0c;它可能会在生产过程中对设备、产品和人员造成损害。ESD接地实时监控系统可以帮助生产企业及时检测并预防ESD事件&#xff0c;从而保护设备和产品的质量&#xf…

【编码魔法师系列_构建型2.1】单例模式「饿汉式」(Singleton Pattern)

学会设计模式&#xff0c;你就可以像拥有魔法一样&#xff0c;在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们&#xff08;GoF&#xff09;凝聚出来的最佳实践&#xff0c;可以提高代码的可读性、可维护性和可重用性&#xff0c;从而让我们的开发效率更高。通…

Java实现图片转文字!(OCR实现)

今天给大家分享一个Java实现OCR&#xff08;图片转文字&#xff09;的方法。 具体实现是把tess4j整合到一个SpringBoot项目中。 下面是详细步骤 什么是Tess4j 在实现OCR之前&#xff0c;先要分清楚Tesseract和Tess4j的区别。 Tesseract是一个开源的光学字符识别&#xff08…

Python数据分析实战-applymap、apply、map有什么区别?(附源码和实现效果)

实现功能 applymap&#xff1a;applymap 是 DataFrame 对象的方法&#xff0c;用于对 DataFrame 中的每个元素应用一个函数。它将函数应用于 DataFrame 的每个元素&#xff0c;并返回一个新的具有相同形状的 DataFrame。applymap 通常用于对 DataFrame 中的每个单元格进行元素…

线性系统的根轨迹分析

根轨迹法&#xff1a;通过求开环零点和开环极点&#xff0c;来画出闭环极点在S平面的位置。 也是用来判断系统稳定性的。 定义&#xff1a;根轨迹是指系统特征方程式的根(闭环极点&#xff09;随系统参量变化 在S平面 上运动而形成的轨迹。 开环传递函数里边的一个参数&…