笔试-精准核酸检测
应用
为了达到新冠疫情精准防控的需要,为了避免全员核酸检测带来的浪费,需要精准圈定可能被感染的人群。
现在根据传染病流调以及大数据分析,得到了每个人之间在时间、空间上是否存在轨迹的交叉。
现在给定一组确诊人员编号(X1,X2,X3…Xn) 在所有人当中,找出哪些人需要进行核酸检测,输出需要进行核酸检测的人数。(注意:确诊病例自身不需要再做核酸检测)
需要进行核酸检测的人,是病毒传播链条上的所有人员,即有可能通过确诊病例所能传播到的所有人。
例如:A是确诊病例,A和B有接触、B和C有接触 C和D有接触,D和E有接触。那么B、C、D、E都是需要进行核酸检测的。
输入:
第一行为总人数N
第二行为确诊病例人员编号 (确证病例人员数量 < N),用逗号隔开
接下来N行,每一行有N个数字,用逗号隔开,其中第i行的第个j数字表名编号i是否与编号j接触过。0表示没有接触,1表示有接触
输出:
需要做核酸检测的人数
实现
N = int(input("总人数:"))
strs = input("确诊病例人员编号:").split(",")
sick = [int(i) for i in strs]A = []
for i in range(0, N):strs = input("接触矩阵:").split(",")lst = [int(i) for i in strs]A.append(lst)one = []
for i in range(0, len(A)):for j in range(i+1, len(A[i])):if A[i][j] == 1:one.append([i, j])result = []def touch(lst):a = len(lst)for i in range(0, len(lst)):for j in range(0, len(one)):if lst[i] == one[j][0]:if one[j][1] not in result:if one[j][1] not in sick:result.append(one[j][1])if lst[i] == one[j][1]:if one[j][0] not in result:if one[j][0] not in sick:result.append(one[j][0])b = len(result)if a-b >= 0:touch(result)touch(sick)
print(len(result))
总人数:5
确诊病例人员编号:1,2
接触矩阵:1,1,0,1,0
接触矩阵:1,1,0,0,0
接触矩阵:0,0,1,0,1
接触矩阵:1,0,0,1,0
接触矩阵:0,0,1,0,1
3