试题描述
告警抑制,是指高优先级告警抑制低优先级告警的规则。高优先级告警产生后,低优先级告警不再产生。请根据原始告警列表和告警抑制关系,给出实际产生的告警列表。注:不会出现循环抑制的情况。
告警不会传递,比如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))
考点解析
这道题目的主要考点包括:
-
数据结构的使用:题目涉及到多个告警抑制关系,需要使用适当的数据结构来存储这些关系,通常使用字典或类似的数据结构来实现。
-
递归算法:题目要求使用递归来处理告警抑制关系,递归是一种重要的算法思想,适用于处理树形结构或者关系网络。
-
输入输出处理:题目要求从标准输入读取数据,并将结果输出到标准输出。需要适当地处理输入和输出的格式。
-
字符串处理:需要处理包含字母和数字的字符串,正确地解析和处理这些字符串是关键。
-
逻辑思维:理解告警抑制关系的逻辑,确保正确地计算实际产生的告警列表。
总的来说,这道题目考察了数据结构、递归算法、字符串处理和逻辑思维等多个编程技能和概念。它涵盖了许多常见的编程要点,对于培养编程能力和解决复杂问题的能力都有一定的帮助。