华为OD统一考试B卷|100分|Python 告警抑制

这是一道关于告警抑制的编程题,要求根据告警优先级和抑制关系,确定实际产生的告警列表。涉及数据结构、递归算法、字符串处理和逻辑思维等技能,适合锻炼编程能力。
摘要由CSDN通过智能技术生成

试题描述
告警抑制,是指高优先级告警抑制低优先级告警的规则。高优先级告警产生后,低优先级告警不再产生。请根据原始告警列表和告警抑制关系,给出实际产生的告警列表。注:不会出现循环抑制的情况。

告警不会传递,比如A—>B,B—>C,这种情况下A不会直接抑制C。
但被抑制的告警仍然可以抑制其他低优先级告警。

输入描述

第一行为数字N,表示告警抑制关系个数,0<=N<=120
接下来N行,每行是由空格分隔的两个告警ID,例如:id1
id2,表示id1抑制id2,告警ID的格式为大写字母+0个或者1个数字
最后一行为告警产生列表,列表长度[1,100]

输出描述

真实产生的告警列表

示例1
输入

2
A B
B C
ABCDE

输出

A D E

说明

A抑制了B,B抑制了C,最后实际的告警为A D E

示例2
输入

4
F G
C B
A G
A0 A
ABCDE

输出

A C D E

备注

告警ID之间以单个空格分隔提交本题型


题解

def suppress_alarms(N, suppressions, alarm_list):
    suppression_dict = {}
    for sup in suppressions:
        high_priority, low_priority = sup.split()
        suppression_dict[low_priority] = high_priority

    result = []
    for alarm in alarm_list:
        suppressed = False
        current_alarm = alarm
        while current_alarm in suppression_dict:
            suppressed = True
            current_alarm = suppression_dict[current_alarm]
        if not suppressed:
            result.append(alarm)

    return result

if __name__ == "__main__":
    N = int(input())
    suppressions = []
    for _ in range(N):
        suppressions.append(input())

    alarm_list = input()

    result = suppress_alarms(N, suppressions, alarm_list)
    print(" ".join(result))


考点解析
这道题目的主要考点包括:

  1. 数据结构的使用:题目涉及到多个告警抑制关系,需要使用适当的数据结构来存储这些关系,通常使用字典或类似的数据结构来实现。

  2. 递归算法:题目要求使用递归来处理告警抑制关系,递归是一种重要的算法思想,适用于处理树形结构或者关系网络。

  3. 输入输出处理:题目要求从标准输入读取数据,并将结果输出到标准输出。需要适当地处理输入和输出的格式。

  4. 字符串处理:需要处理包含字母和数字的字符串,正确地解析和处理这些字符串是关键。

  5. 逻辑思维:理解告警抑制关系的逻辑,确保正确地计算实际产生的告警列表。

总的来说,这道题目考察了数据结构、递归算法、字符串处理和逻辑思维等多个编程技能和概念。它涵盖了许多常见的编程要点,对于培养编程能力和解决复杂问题的能力都有一定的帮助。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拎把镐头打狼去

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值