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

矩阵乘法计算量估算

https://www.nowcoder.com/practice/15e41630514445719a942e004edc0a5b?tpId=37&tqId=21292&rp=1&ru=%2Fexam%2Foj%2Fta&qru=%2Fexam%2Foj%2Fta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=

#include <iostream>
#include <vector>
#include <utility>
#include <stack>
using namespace std;

int main() {
    int n,sum=0;
    char c;
    stack<char> cal;                        //存放表达式
    cin>>n;
    vector<pair<int,int>> matrix;           //存放输入矩阵以及计算中产生的矩阵
    for(int i=0;i<n;i++){                   //输入矩阵
        int x,y;
        cin>>x>>y;
        matrix.push_back(make_pair(x,y));
    }
    while(cin>>c){
        if(c=='('||(c<='Z'&&c>='A')){       //'('与字母入栈
            cal.push(c);
        }
        if(c==')'){                         //输入')'开始计算,因为两个括号间只有两个矩阵相乘的一次计算,故不使用循环
            int i=cal.top()-'A';            //记录第二个矩阵的下标
            cal.pop();                      //弹出矩阵
            int j=cal.top()-'A';            //记录第一个矩阵的下标
            cal.pop();                      //弹出矩阵
            sum+=matrix[j].first*matrix[j].second*matrix[i].second;//计算量
            cal.pop();                      //弹出'('
            cal.push(matrix.size()+'A');    //记录新产生的矩阵,下标为matrix.size()+'A'
            matrix.push_back(make_pair(matrix[j].first,matrix[i].second));
        }
    }
    cout<<sum<<endl;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务