又是一个表达式解析求值的题. 又到了eval魔法登场的时候了.

主要是一下几个方面要注意:

  • 观察输入的表达式,发现需要在字母之间插入运算符,这里是*.
  • 定义一个class重载__mul__方法,并实现乘法运算次数的计算逻辑.
  • 使用exec将对应的字母绑定到对应参数初始化的实例.
  • 最后eval一下就好了.

这样就免去了写解析的逻辑了.

class Mat:
    def __init__(self,nr,nc):
        self.n_mul=0
        self.nr=nr
        self.nc=nc
    
    def __mul__(self,o):
        ret=Mat (self.nr,o.nc)
        ret.n_mul=self.nr*self.nc*o.nc+self.n_mul+o.n_mul
        return ret

    def __str__(self):
        return str(self.n_mul)

n=int(input())
for i in range(n):
    exec('%s=Mat(%d,%d)' %
        ((chr(i+ord('A')),)+tuple(map(int,input().strip().split())))
    )

s=input()
es=[]

def isLeft(x:str):
    return x.isalpha() or x==')'

def isRight(x:str):
    return x.isalpha() or x=='('

for i in range(len(s)):
    if i!=0 and isLeft(s[i-1]) and isRight(s[i]):
        es.append('*')
    es.append(s[i])

print(eval(''.join(es)))