解题思路:
通读全题,易得思路,先找出不同的科目,再找每个科目的节数,当该科目有三节及以上的时候,对课程的时间进行比较,找出最长的两段时间求和;当科目小于三节时,直接求和即可。最后将两种情况求和,即可。
二维列表的使用:
该题使用到了二维列表。首先弄两个空列表l,k,一个用来存科目,另一个用来存课程的时间。当l中增加科目时,也在k中增加该科目的时间列表。当出现相同科目时,我们就找到对应该科目的上课时间的一维列表的位置添加时间。这样存课程时间的列表就是一个二维列表。
遍历二维列表中每个列表,当长度大于等于3时,就排序,对最长的两段时间求和;当长度小于3时,直接求和。
n = int(input()) l = [] k = [] for i in range(n): a,b = input().split() if a not in l: l.append(a) k.append([int(b)]) else: p = l.index(a) k[p].append(int(b)) ans = 0 for i in k: if len(i) >= 3: i.sort() ans += i[-1]+i[-2] else: ans += sum(i) print(ans)