题解 | #矩阵乘法计算量估算#

矩阵乘法计算量估算

https://www.nowcoder.com/practice/15e41630514445719a942e004edc0a5b

import sys

"""
(A(BC)) = (A_{p,m}(B_{m,n}C_{n,q}))
关键1: 乘法次数 = m*n*q + p*m*q
关键2: 识别括号; list.pop(*) 实现出栈,list.append(*) 实现入栈
"""

while True:
    try:
        arr_n = int(input())
        dim_pair_list = []
        for i in range(arr_n):
            dim_pair_list.append(list(map(int, input().split())))  # 第i组行数->空格->列数->回车
        arr_series = input()  # (A(BC))
        
        keys_str = arr_series.replace("(", "").replace(")", "")  # replace方法不会改变原字符串
        dim_pair_dict = dict(zip(keys_str, dim_pair_list))  # 不必假设矩阵ABCDEF顺序出现

        arr_list = []  # 栈
        multi_num = 0
        for i_char in arr_series:
            if i_char != ")":
                arr_list.append(i_char)
            else:
                C_label = arr_list.pop()
                B_label = arr_list.pop()
                arr_list.pop()  # 删除 '('
                multi_num += (
                    dim_pair_dict[B_label][0]
                    * dim_pair_dict[B_label][1]
                    * dim_pair_dict[C_label][1]
                )

                dim_pair_dict[B_label] = [
                    dim_pair_dict[B_label][0],
                    dim_pair_dict[C_label][1],
                ]
                arr_list.append(B_label)
        print(multi_num)
    except:
        break

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务