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

矩阵乘法计算量估算

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

#include <bits/stdc++.h>

using namespace std;

int main(){
    int n = 0;
    while(cin >> n){
        vector<pair<int, int>> matrixs(n); //行数和列数
        for(int i = 0; i < n; i++){
            cin >> matrixs[i].first;
            cin >> matrixs[i].second;
        }
        string s = "";
        cin >> s;
        
        //矩阵乘法 第一行第一列相乘相加
        //A是一个50×10的矩阵,B是10×20的矩阵  则次数为:50×10×20
        int res = 0;
        stack<pair<int, int>> st; //栈存储矩阵的行数和列数
        for(int i = 0; i < s.size(); i++){ //遍历字符串
            if(s[i] == ')'){ //如果是右括号,则栈弹出两个元素,并累加乘法次数
                auto y = st.top(); //后面的矩阵
                st.pop();
                auto x = st.top(); //前面的矩阵
                st.pop();
                
                if(x.second == y.first){
                    res += x.first * x.second * y.second;
                    st.push({x.first, y.second}); // //把形成的新矩阵的行数和列数入栈
                }
                //
                /*else if(y.second == x.first){
                    res += y.first * y.second * x.second;
                    st.push({y.first, x.second}); //把形成的新矩阵的行数和列数入栈
                }*/
            }
            else if(s[i] != '('){ ////如果是字符,则直接入栈
            //else if(isalpha(s[i])){   
                // A是第一个矩阵 它的行数和列数对应matrix[0]
                int t = s[i] - 'A';
                st.push(make_pair(matrixs[t].first, matrixs[t].second));
            }
        }
        
        //输出
        cout << res << endl;
    }
    
    return 0;
}
华为题库题解 文章被收录于专栏

牛客华为题库的题解

全部评论

相关推荐

2025-12-28 16:32
重庆邮电大学 Java
程序员花海:1.技能放最后,来面试默认你都会,技能没啥用 2.实习写的看起来没啥含金量,多读读部门文档,包装下 接LLM这个没含金量 也不要用重构这种 不会给实习生做的 3.抽奖这个还是Demo项目,实际在公司里面要考虑策略,满减,触发点,触发规则 库存 之类的,不是这个项目这么简单 4.教育背景提前,格式为 教育背景 实习 项目 技能 自我评价
简历被挂麻了,求建议
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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