华为OD机试 - 垃圾信息拦截(Java 2024 C卷 100分)

news2024/11/15 11:13:24

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
      • 1、输入
      • 2、输出
      • 3、说明
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

华为OD机试 2024C卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

大众对垃圾短信深恶痛绝,希望能对垃圾短信发送者进行识别,为此,很多软件增加 了垃圾短信识别机制。经分析,发现正常用户的短信通常具备交互性,而垃圾短信往 往都是大量单向的短信,按照如下规则进行垃圾短信识别:

本题中,发送者A符合以下条件之一的,则认为A是垃圾短信发送者:

① A 发送短信的接收者中,没有发过短信给A的人数 L > 5;
② A 发送的短信数 - A接收的短信数 M > 10;
③ 如果存在 X,A 发送给 X 的短信数 - A 接收到X的短信数N > 5。

二、输入描述

第一行为条目数目,接下来几行是具体的条目,每个条目,是一对ID,第一个数字是发送者ID,后面的数字是接收者ID,中间空格隔开,所有的ID都为无符号整型,ID最大值为100;

同一个条目中,两个ID不会相同(即不会自己给自己发消息);

最后一行为指定的ID。

三、输出描述

输出该ID是否为垃圾短信发送者(是输出 true,否则输出 false),并且按序列输出L、M的值(由于N值不唯一,不需要输出);
输出均为宇符串。

1、输入

8
1 2
1 3
1 4
1 5
1 6
6 1
5 2
6 3
1

2、输出

false 4 1

3、说明

  1. 输出该ID是否为垃圾短信发送者(是输出 true,否则输出 false),并且按序列输出L、M的值;
  2. 没有发过短信给A的人数L,A接收的短信数 M。

没有发过短信给A的人数L为4,A接收的短信数 M为1。

四、解题思路

此题还是很简单的,根据题意解析即可。

  1. 定义没有发过短信给A的人数L、A接收的短信数 M、A 发送给 X 的短信数X、A 接收到X的短信数N;
  2. 遍历A发送的短信关系aToList;
  3. 获取接收A短信的用户的短信发送信息;
  4. 如果未给A发送,则没有发过短信给A的人数L++;
  5. 否则A接收的短信数 M++;
  6. 获取A 发送给 X 的短信数X、A 接收到X的短信数N;
  7. 如果存在 X,A 发送给 X 的短信数 - A 接收到X的短信数N > 5,则视为垃圾短信发送者,输出true,不再计算N值;
  8. 根据①、②、③判断条件,判断是否为垃圾短信发送者,满足一个即为垃圾短信发送者:
    1. A 发送短信的接收者中,没有发过短信给A的人数 L > 5;
    2. A 发送的短信数 - A接收的短信数 M > 10;
    3. 如果存在 X,A 发送给 X 的短信数 - A 接收到X的短信数N > 5;
  9. 输出该ID是否为垃圾短信发送者(是输出 true,否则输出 false),并且按序列输出L、M的值。

五、Java算法源码

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = Integer.valueOf(sc.nextLine());
    Map<Integer, List<Integer>> map = new HashMap<>();
    for (int i = 0; i < n; i++) {
        int[] arr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        List<Integer> list = map.getOrDefault(arr[0], new ArrayList<>());
        list.add(arr[1]);
        map.put(arr[0], list);
    }
    Integer A = Integer.valueOf(sc.nextLine());
    List<Integer> aToList = map.get(A);
    // 1. A 发送短信的接收者中,没有发过短信给A的人数 L > 5
    // 没有发过短信给A的人数
    int L = 0;
    // A接收的短信数 M
    int M = 0;
    // A 发送给 X 的短信数
    int X = 0;
    //  A 接收到X的短信数N
    int N = 0;
    // 3.如果存在 X,A 发送给 X 的短信数 - A 接收到X的短信数N > 5
    boolean flag = false;
    for (Integer num : aToList) {
        List<Integer> toAList = map.getOrDefault(num, new ArrayList<>());
        if (!toAList.contains(A)) {
            L++;
        } else {
            M++;

            // 3.如果存在 X,A 发送给 X 的短信数 - A 接收到X的短信数N > 5
            if(!flag){
                // A 发送给 X 的短信数
                X = Collections.frequency(aToList, num);
                //  A 接收到X的短信数N
                N = Collections.frequency(toAList, A);
                if(X - N > 5){
                    flag = true;
                }
            }
        }
    }

    // 2. A 发送的短信数 - A接收的短信数 M > 10
    // A 发送的短信数
    int aSend = aToList.size();

    // 没有发过短信给A的人数L,A接收的短信数 M
    StringBuilder builder = new StringBuilder();
    if (L > 5 || aSend - M > 10 || flag) {
        builder.append("true").append(" ").append(L).append(" ").append(M);
    }else{
        builder.append("false").append(" ").append(L).append(" ").append(M);
    }
    System.out.println(builder);
}

六、效果展示

1、输入

12
1 2
1 3
1 4
1 5
1 6
1 7
1 8
6 1
7 1
8 1
5 2
6 3
1

2、输出

false 4 3

3、说明

  1. 输出该ID是否为垃圾短信发送者(是输出 true,否则输出 false),并且按序列输出L、M的值;
  2. 没有发过短信给A的人数L,A接收的短信数 M。

没有发过短信给A的人数L为4,A接收的短信数 M为3。

在这里插入图片描述


🏆下一篇:华为OD机试 - 最长的顺子 - 感谢@禁止你发言提供的更简便算法(Java 2023 B卷 200分)

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷+C卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

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

相关文章

网络安全之渗透实战学习

前言 本次渗透以SMB共享之SCF文件攻击为突破点&#xff0c;利用burp编码爆破Basic Authorization认证、smb连接的多种方法、windows用户的NTLM值破解方法、evil-winrm的运用、windows主机信息收集工具、msf运行powershell脚本、远程运行powershell脚本、PrintNightmare漏洞提权…

内存抖动导致shared pool资源征用分析

业务hang住&#xff0c;后台查看事件都是“latch: shared pool” 根据堵塞的blocking_session检查sid为1873的会话 发现都是MMAN进程堵塞&#xff0c;我们都知道Oracle的MMAN进程&#xff08;Memory Manager Process&#xff0c;内存管理进程&#xff09;会根据系统负载的变化和…

2024.3.11 C++作业

1、提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数要求使用C风格字符串完成 #include <iostream>using namespace std;int main() {char str[20];cout << "please enter the str:";gets(str);in…

2024 年广东省职业院校技能大赛(高职组) “云计算应用”赛项样题⑤

2024 年广东省职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项样题⑤ 模块一 私有云&#xff08;50 分&#xff09;任务 1 私有云服务搭建&#xff08;10 分&#xff09;任务 2 私有云服务运维&#xff08;25 分&#xff09;任务 3 私有云运维开发&#xf…

基于云效构建部署NodeJS项目到ACK

准备工作 01、编写Dockerfile文件可以根据不同的环境&#xff0c;新建不同的Dockerfile文件&#xff0c;比如Dockerfile-PROD # Deliver the dist folder with NginxFROM nginx:stable-alpine ENV LANGC.UTF-8 ENV TZAsia/ShanghaiCOPY dist/ /usr/share/nginx/html COPY ngi…

Redis中AOF数据持久化

AOF介绍 AOF&#xff08;Append Only File&#xff09;持久化&#xff1a;以独立日志的方式存储了 Redis 服务器的顺序指令序列&#xff0c;并只记录对内存进行修改的指令。 当Redis服务发生雪崩等故障时&#xff0c;可以重启服务并重新执行AOF文件中的指令达到恢复数据的目的…

Windows系统中安装docker及镜像加速的配置

文章目录 一.安装wsl二.下载docker desktop三.更换Docker镜像引用出处 一.安装wsl 在安装wsl之前&#xff0c;先在Windows中配置WSL环境,步骤很简单&#xff0c;按照以下文章进行 Windows10/11配置WSL(Ubuntu)环境 以管理员身份打开Windows PowerShell&#xff0c;执行以下命…

怎样将PPT转成文本格式?PPT文本一键生成文本格式 工作经验分享

在日常工作和学习中&#xff0c;我们经常需要将PPT文件转换为文本格式&#xff0c;以便更好地进行编辑、搜索和分享。下面&#xff0c;我将介绍2种常见的PPT转文本格式的方法&#xff0c;帮助大家轻松实现这一需求。 方法一、使用汇帮PDF转换器软件里的“PPT文件操作”菜单进行…

Linux面试题汇总!附答案详解!学习提升必备!(30w+收藏)

Linux 概述 什么是Linux Unix和Linux有什么区别&#xff1f; 什么是 Linux 内核&#xff1f; Linux的基本组件是什么&#xff1f; Linux 的体系结构 BASH和DOS之间的基本区别是什么&#xff1f; Linux 开机启动过程&#xff1f; Linux系统缺省的运行级别&#xff1f; L…

Python docx学习笔记

个人学习笔记。 1 工具介绍 python-docx 是用于创建可修改 微软 Word 的一个 python 库&#xff0c;提供全套的 Word 操作&#xff0c;是最常用的 Word 工具。 1.1 基本概念 Document&#xff1a;是一个 Word 文档 对象&#xff0c;不同于 VBA 中 Worksheet 的概念&#xf…

带你搞清楚strtok函数和strerror函数的使用!

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

Linux 多进程开发(上)

第二章 Linux 多进程开发 2.1 进程概述2.2 进程状态转换2.3 进程创建2.4 exec 函数族2.5 进程控制 网络编程系列文章&#xff1a; 第1章 Linux系统编程入门&#xff08;上&#xff09; 第1章 Linux系统编程入门&#xff08;下&#xff09; 第2章 Linux多进程开发&#xff08;…

python 基础知识点(蓝桥杯python科目个人复习计划62)

今日复习内容&#xff1a;做题 例题1&#xff1a;付账问题 问题描述&#xff1a; 几个人一起出去吃饭是常有的事&#xff0c;但在结账的时候&#xff0c;常常会出现一些争执。 现在有n个人出去吃饭&#xff0c;他们总共消费了S元&#xff0c;其中第i人带了ai元。幸运的是&a…

关于仅销售预包装食品的食品经营者备案有关事项的通知

江北新区、各区市场监督管理局、行政审批局&#xff1a; 为贯彻落实《中华人民共和国食品安全法》第三十五条规定和国务院《关于深化“证照分离”改革进一步激发食品安全发展活力的通知》精神《市场主体》&#xff08;国发[2021]7号&#xff09;&#xff0c;现将仅销售预包装食…

ModuleNotFoundError: No module named ‘serial.tools‘

解决以上报错的方法&#xff1a; 1、大家在使用以下代码时&#xff1a; port_list list(serial.tools.list_ports.comports()) 会出现报错&#xff1a; ModuleNotFoundError: No module named serial.tools; serial is not a package 这个时候我们应该先安装serial 然…

Codeforces Round 933 (Div. 3)C:Rudolf and the Ugly String

题目链接&#xff1a;Dashboard - Codeforces Round 933 (Div. 3) - Codeforces 解题思路&#xff1a; 解题思路&#xff1a; 题目大概意思是字符串中最少去掉几个单词可以使字符串变漂亮&#xff0c;其实只要找“map"和”pie“这两个单词数量&#xff0c;注意判断&quo…

19、deque赋值操作

#include <iostream> using namespace std; #include <deque>void printdeque (const deque<int>& d) {for (deque<int>::const_iterator it d.begin(); it ! d.end(); it ){//*it 100 容器中的数据不可修改cout << *it << " &…

CAN一致性测试:物理层测试之位时间测试

从本周开始结合工作实践&#xff0c;给大家总结CAN一致性相关的测试 包括&#xff1a;物理层、数据链路层、应用层三大块知识点 CAN一致性测试:物理层测试之位时间测试 试验目的&#xff1a;测试控制器输出的差分电平位信号的特征。 试验依据&#xff1a;GMW3122&#xff0…

C++第二弹---C++入门(中)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 C入门 1、函数重载 1.1、函数重载概念 1.2、C支持函数重载的原理--名字修饰(name Mangling) 3、引用 3.1、引用概念 3.2、引用特性 3.3、常引用 …

图片和PDF 加水印去水印

图片和PDF 加水印去水印 前要1. 图片加水印1.1 方法11.2 方法2 2. 去水印3. pdf加水印4. pdf 去水印 前要 网上查了很多资料, 汇总了几个不错的代码, 顺便做个笔记 1. 图片加水印 1.1 方法1 简单方便, 后也好处理 # -*- coding:utf-8 -*- import os from PIL import Imag…