华为od考试记录 - 告警抑制 - Python

本文讲解了如何用Python处理告警抑制问题,利用defaultdict处理告警关系,生成无循环抑制的实际告警列表。

互联网收集的od练习题, 记录解题过程. 因为无运行环境.暂时无法验证正确性,仅供参考

题目描述:
告警抑制,是指高优先级告警抑制低优先级告警的规则。高优先级告警产生后,低优先级告警不再产生。
请根据原始告警列表和告警抑制关系,给出实际产生的告警列表。
不会出现循环抑制的情况。
告警不会传递,比如A->B,B->C,这种情况下A不会直接抑制C。但被抑制的告警仍然可以抑制其他低优先级告警。

输入:
2
A B
B C
A B C D E
输出
A D E

from collections import defaultdict


def solution():
    # 解析告警列表并建立关系
    warn_relation = defaultdict(set)
    n = int(input())
    for _ in range(n):
        a, b = input().split()
        warn_relation[b].add(a)  # 记录被抑制的关系集合

    origin_warns = input().split()

    no_warn = []
    for warn in origin_warns:
        if warn in warn_relation:
            if len(warn_relation[warn] & set(origin_warns)) == 0:  # 抑制集合和总告警集合若存在交集,则表示被抑制
                no_warn.append(warn)
        else:
            no_warn.append(warn)

    print(*no_warn)

collections.defaultdict 类似与dict, 使用时不用担心字典键为空造成的报错
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值