# 这个题的核心思路为: # 我们从左到右去遍历一个带左右括号和字母的字符串,每当我们从左到右遇到一次右括号, # 注意,从左到右遇到的第一个右括号,一定是需要“开心消消乐”的最中间的一组,即开始消除的地方,非常巧妙 # 我们遇到第一个右括号,就消消乐掉上一个左括号和匹配的字母且此题中一定为(AB)这种形式 # 我们消除掉的(AB)它变成了一个新的 A*B,返回到原来的字符串中 # 之后我们遇到的第二个右括号,又去找右括号左边的两位,注意此时的“两位”中“右边”一位就是我们上一步的“A*B" # ,,,, while True: try: a=int(input()) # a是个数 3 box = [input() for _ in range(a)] # box是一串数字字符串 c = input() # c是‘(ABC)’ box = [ [int(each.split(' ')[0]),int(each.split(' ')[1])] for each in box ] #将box元素处理为[[1,2],[2,3]]这种 new = [] cal = 0 for i in c: # 对C中每一个遍历 if i=='(': # 若为左括号我们不管 pass elif i.isalpha(): # 若为字母,new中每次取box中第一个(用box.pop(0)代表用一个删一个) new.append(box.pop(0)) # 遇到字母我们给new中加一个[1,2]这种 elif i==')' and len(new)>=2: # ')' 若出现了右括号 # 注意 此处的坑壁,就是len(new)要大于2,否则下面不会出现倒数第二个,什么意思?就是为了防# 止出现输入的是‘A’,(题目中说了输入的矩阵个数是从1开始可以为1) p,q,r = new[-2][0] , new[-1][0], new[-1][1] # 若出现右括号 我们需要对new中的倒数两个元素来做一次乘法,后记录增加于变量cal cal += p*q*r new.pop(-1) # 用掉的两个我们对最后一个删掉 new[-1] = [p,r] # 倒数第二个现在变成倒数第一个了,替换为乘法乘出来来的新矩阵 print(str(cal)) except: break