华为OD机试真题-手机App防沉迷系统-2023年OD统一考试(C卷)

news2024/11/16 15:25:47

题目描述:

智能手机方便了我们生活的同时,也侵占了我们不少的时间。“手机App防沉迷系统”能够让我们每天合理的规划手机App使用时间,在正确的时间做正确的事。

它的大概原理是这样的:

1、在一天24小时内,可注册每个App的允许使用时段;

2、一个时段只能使用一个App,举例说明:不能同时在09:00-10:00注册App2和App3;

3、App有优先级,数值越高,优先级越高。注册使用时段时,如果高优先级的App时间和低优先级的时段有冲突,则系统会自动注销低优先级的时段;如果App的优先级相同,则后添加的App不能注册。

举例1:

(1)注册App3前:

(2)App3注册时段和App2有冲突:

(3)App3优先级高,系统接受App3的注册,自动注销App2的注册:

举例2:

(1)注册App4:

(2)App4和App2及App3都有冲突,优先级比App2高,但比App3低,这种场景下App4注册不上,最终的注册效果如下:

4、一个App可以在一天内注册多个时段。

请编程实现,根据输入数据注册App,并根据输入的时间点,返回该时间点可用的App名称,如果该时间点没有注册任何App,请返回字符串"NA"。

输入描述:

输入分3部分:第一行表示注册的App数N(N≤100);第二部分包括N行,每行表示一条App注册数据;最后一行输入一个时间点,程序即返回该时间点的可用App。

2

App1 1 09:00 10:00

App2 2 11:00 11:30

09:30

数据说明如下:

1、N行注册数据以空格分隔,四项数据依次表示:App名称、优先级、起始时间、结束时间

2、优先级1-5,数字值越大,优先级越高

3、时间格式HH:MM,小时和分钟都是两位,不足两位前面补0

4、起始时间需小于结束时间,否则注册不上

5、注册信息中的时间段包含起始时间点,不包含结束时间点

输出描述:

输出一个字符串,表示App名称,或NA表示空闲时间。

补充说明:

1、用例保证时间都介于00:00-24:00之间;

2、用例保证数据格式都是正确的,不用考虑数据输入行数不够、注册信息不完整、字符串非法、优先级超限、时间格式不正确的问题。

示例1

输入:

1
App1 1 09:00 10:00
09:30

输出:

App1

说明:

App1注册在9点到10点间,9点半可用的应用名是App1

示例2

输入:

2
App1 1 09:00 10:00
App2 2 09:10 09:30
09:20

输出:

App2

说明:

App1和App2的时段有冲突,App2的优先级比App1高,注册App2后,系统将App1的注册信息自动注销后,09:20时刻可用应用名是App2.

示例3

输入:

2
App1 1 09:00 10:00
App2 2 09:10 09:30
09:50

输出:

NA

说明:

App1被注销后,09:50时刻没有应用注册,因此输出NA。

代码报告

解题思路:考察对数组、字符串、编程基础、循环、统计的理解和运用。

import java.util.Scanner;
import java.util.*;


public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int N;
        N = in.nextInt();
        in.nextLine();

        List<App> list = new ArrayList<>(N);

        for (int i = 0; i < N; i++) {
            App app = new App();
            app.name = in.next();
            app.level = Integer.parseInt(in.next());
            app.start = timeToMin(in.next());
            app.end = timeToMin(in.next());

            if (app.start <= app.end) {
                list.add(app);
            }
        }


        List<Duration> dlist = new ArrayList<>();
       

        for (int i = 0; i < list.size(); i++ ) {
            if (i == 0) {
                App a = list.get(i);

                Duration d = new Duration();
                d.name = a.name;
                d.start = a.start;
                d.end = d.end;
                d.index = i;
                dlist.add(d);
                continue;
            }

            App current = list.get(i);
            Set<Integer> set = new HashSet<>();
            for (int j = current.start; j < current.end; j++) {
                for (int k = 0; k < dlist.size(); k++) {
                    Duration d = dlist.get(k);

                    if (j >= d.start && j < d.end) {
                        set.add(d.index);
                    }
                }
               
            }

            boolean isDown = false;
            for (int index : set) {
                if (list.get(index).level > current.level) {
                    isDown = true;
                }
            }

            if (isDown) {

            } else {
                for (int index : set) {
                    App a = list.get(index);

                    Duration d = new Duration();

                    d.name = a.name;
                    d.start = a.start;
                    d.end = a.end;
                    d.index = index;

                    dlist.remove(d);
                  
                Duration d = new Duration();

                d.name = current.name;
                d.start = current.start;
                d.end = current.end;
                d.index = i;
                dlist.add(d);
            }
        }


        String time = in.next();

        int min = timeToMin(time);
        Duration result = null;
        for (int k = 0; k < dlist.size(); k++) {
            Duration d = dlist.get(k);

            if (min >= d.start && min < d.end) {
                result = d;
            }
        }


        if (result == null) {
            System.out.print("NA");
        } else {
            System.out.print(result.name);
        }

    }

    static class App {
        String name;
        int level;
        int start;
        int end;
    }

    static public int timeToMin(String t) {
        String[] s = t.split(":");
        int hour = Integer.parseInt(s[0]);
        int min = Integer.parseInt(s[1]);
        return hour * 60 + min;
    }

    static public void setBitMap(int[] bitmap, int index, int start, int end) {
        for (int i = start; i <= end; i++) {
            bitmap[i] = index;
        }
    }

    static public void unsetBitMap(int[] bitmap, int start, int end) {
        for (int i = start; i <= end; i++) {
            bitmap[i] = -1;
        }
    }

    static class Duration {
        String name;
        int start;
        int end;
        int index;

        public boolean equals(Object o) {
            if (o == null) return false;
            Duration od = (Duration)o;
            return this.name.equals(od.name) && this.start == od.start &&
                   this.end == od.end && this.index == od.index;
        }

        public int hashCode() {
            return Objects.hash(new Object[] {this.name, this.start, this.end, this.index});
        }
    }
}

 

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

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

相关文章

什么洗地机值得推荐?2024入门级智能洗地机

对于当代社畜&#xff0c;每天下班后回家已经疲惫不堪&#xff0c;但家务活仍然等待着处理。虽然外卖可以解决洗碗的问题&#xff0c;但地面的清洁却是无法回避的任务。传统的扫地、拖地流程让人感到腰酸背痛&#xff0c;因此人们纷纷寻找能够快速清洁地面的工具&#xff0c;如…

Shell命令与Linux操作系统:深入理解其原理和功能(2/2)

在当今数字化时代&#xff0c;操作系统的安全性和稳定性对于个人用户和企业都至关重要。Linux&#xff0c;作为一个广泛使用的操作系统&#xff0c;其强大的文件权限系统是保护系统安全的核心机制之一。无论是在服务器管理、软件开发还是日常使用中&#xff0c;有效地管理和理解…

scons_交叉编译arm64_sysroot基于根文件rootfs编译方法

文章目录 1.问题现象2.环境变量3.实例1:交编译arm64 hello.c解决方法1: 指定rootfs下的include头文件解决方法2: 下载开源arm64-linux-gnu-gcc小结 4.交叉编译依赖第3方库1.前言2.小知识: gcc默认搜索与支持的库3.实例: 交叉编译依赖ROS的程序gcc/g 编译流程gcc/g 链接流程 5.遇…

阿里云双11活动:如何通过客户端连接linux服务器?配置入门详解

前言 最近双11活动&#xff0c;发现阿里云有服务器活动&#xff0c;就买了一个&#xff0c;今天主要给大家介绍下&#xff0c;如何通过通过客户端进行连接linux服务器后&#xff0c;进行简单的操作。 配置服务器信息 打开浏览器登录到阿里云服务器页面上&#xff0c;找到个人…

uni-app/vue封装etc车牌照输入,获取键盘按键键值

先看下效果如下&#xff1a; 动态图如下 uniapp的keyup获取不到keyCode和compositionstart&#xff0c;compositionend&#xff0c;所以需要监听input节点的keyup事件&#xff0c; 思路以及代码如下&#xff1a; 1.将每一个字符用文本框输入&#xff0c;代码如下 <view …

ClickHouse基础知识(二):ClickHouse 安装教程

1. 准备工作 1.1 确定防火墙处于关闭状态 1.2 CentOS 取消打开文件数限制 &#xff08;1&#xff09;在 hadoop101 的 /etc/security/limits.conf 文件的末尾加入以下内容 sudo vim /etc/security/limits.conf&#xff08;2&#xff09;在 hadoop101 的/etc/security/limits.…

64.乐理基础-打拍子-前八后十六、前十六后八拍子

前置内容&#xff1a;63.乐理基础-打拍子-四十六-CSDN博客 前八后十六指的是前半拍是一个八分音符&#xff0c;后半怕是两个十六分音符的节奏型&#xff0c;如图1。 前十六后八刚好就与前八后十六反着&#xff0c;如图3。 图1&#xff1a;在以四分音符为一拍的时候这三个音符加…

Android下载gradle失败解决方法

1、在gradle-wrapper.properties文件中查看自己需要下载gradle什么版本的包和zip路径&#xff08;wrapper/dists&#xff09;。 2、在setting中查看Gradle的保存路径&#xff0c;如下图&#xff1a;C:/Users/Administrator/.gradle&#xff0c;加上第一步的zip路径得到下载grad…

chcp 65001

chcp 65001 DOS,BAT,CMD乱码 转UTF-8&#xff0c;就不会汉字乱码了 936 GBK 65001 UTF-8

C语言中关于if else的理解

if else我们可以理解为 if(条件1) //如果条件1成立 语句1&#xff1b; //执行语句1 else //如果条件1不成立 语句2; //执行语句2 这是一个经典的if els…

Vue Echarts 多折线图只有一条X轴(合并X轴数据并去重排序) - 附完整示例

echarts&#xff1a;一个基于 JavaScript 的开源可视化图表库。 目录 效果 一、介绍 1、官方文档&#xff1a;Apache ECharts 2、官方示例 二、准备工作 1、安装依赖包 2、示例版本 三、使用步骤 1、在单页面引入 echarts 2、指定容器并设置容器宽高 3、数据处理&am…

Word中插入mathtype的行内公式显示不全,设置行距,最小值

Word中插入mathtype的行内公式显示不全 如下图&#xff1a;公式上下被遮住 解决方式&#xff1a; 设置所在段落的行距&#xff1a;最小值--xx磅。同时取消勾选 “如果定义了文档网格&#xff0c;则对齐到网格” 处理后效果&#xff1a;

电子科大软件架构设计——期末复习题集

文章目录 系统分析与设计概述面向对象建模语言系统规划系统需求分析系统架构设计软件建模详细设计与设计模式用户界面设计 系统分析与设计概述 1&#xff0e;下面哪个不是信息系统利益相关者?&#xff08;D) A&#xff0e;客户B&#xff0e;用户 C.开发人员D&#xff0e;监理…

免费SSL证书申请入口

免费SSL证书的优势 a. 低成本 免费SSL证书相对于其他类型的SSL证书来说&#xff0c;无需支付昂贵的费用。对于个人网站、小型企业或预算有限的组织而言&#xff0c;免费SSL证书是一种经济实惠的选择。 b. 提高搜索引擎排名 搜索引擎算法中&#xff0c;对于使用HTTPS协议的网…

Solana 生态铭文跨链桥 Sobit 是何神圣?其场外白名单已达到1200U

在短暂的沉寂&#xff0c;在与 Solana 手机 Saga 联合生态 Meme 币 Bonk 掀起一波 meme 浪潮&#xff0c;以及GPU 计算网路Render network 宣布将从公链Polygon迁往Solana 后&#xff0c;Solana 生态再次迎来爆发。随着 SOL 代币在 12 月暴涨&#xff0c;SOL 也在市值上超越了 …

性能测试-jemeter:安装 / 基础使用

一、理解jemeter 官网-Apache JMeter-Apache JMeter™ JMeter是一款开源的性能测试工具&#xff0c;主要用于模拟大量用户并发访问目标服务器&#xff0c;以评估服务器的性能和稳定性。 JMeter可以执行以下任务序号用途描述1性能测试通过模拟多个用户在同一时间对服务器进行…

python风格规范之missing whitespace after

python风格规范之missing whitespace after 规范错误/警告描述规范错误描述(示例)规范错误认知正确示例 规范错误/警告描述 PEP 8: E231 missing whitespace after [mark]规范错误描述(示例) 规范错误认知 上述规范错误表示"[mark]"后面没有添加空格 。错误示例如下…

第一届能源电子产业创新大赛太阳能光伏赛道在京顺利完成初赛评审

近日&#xff0c;第一届能源电子产业创新大赛太阳能光伏赛道初赛在北京顺利举行。本次太阳能光伏赛道赛事由工业和信息化部产业发展促进中心、宜宾市人民政府主办&#xff0c;宜宾市经济和信息化局、宜宾高新技术产业园区承办&#xff0c;中国国检测试控股集团股份有限公司协办…

C语言之字符串处理

目录 字符串长度 显示字符串 数字字符的出现次数 大小写字符转换 字符串数组的参数传递 非字符串的字符数组 目前我们所学习到的是围绕字符串的处理&#xff0c;仅仅是生成字符串、读取并显示字符串&#xff0c;下面我学习更加灵活处理字符串的方式。 字符串长度 我们来看…

MR实战:统计总分与平均分

文章目录 一、实战概述二、提出任务三、完成任务&#xff08;一&#xff09;准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录 &#xff08;二&#xff09;实现步骤1、创建Maven项目2、添加相关依赖3、创建日志属性文件4、创建成绩映射器类5、创建成绩驱动器类6、启…