华为机试-----矩阵乘法计算量估算

矩阵乘法计算量估算

#include<iostream>
#include<string>
#include<stack>

using namespace std;

int main()
{
    int n,i,r1,c1,r2,c2;
    string str;
    stack<int> row;
    stack<int> col;
    while(cin>>n){
        int a[n][2];//存行列
        int res=0;
        int num1=0,num2=0;
        for(i=0;i<n;i++)
            cin>>a[i][0]>>a[i][1];
        cin>>str;
        while(!row.empty())
            row.pop();
        while(!col.empty())
            col.pop();
        for(i=0;i<str.size();i++){
            if(str[i]=='('){
                num1++;
                continue;
            }
            else if(str[i]==')'){
                num2++;
                if(num2<=num1){
                    r1=row.top();
                    c1=col.top();
                    row.pop();
                    col.pop();
                    r2=row.top();
                    c2=col.top();
                    row.pop();
                    col.pop();
                    res+=r2*c2*c1;
                    row.push(r2);
                    col.push(c1);
                }
            }
            else{
                row.push(a[str[i]-'A'][0]);
                col.push(a[str[i]-'A'][1]);
                //cout<<a[str[i]-'A'][0]<<" "<<a[str[i]-'A'][1]<<endl;
            }
        }
        cout<<res<<endl;
    }
}

思路

利用栈依次遍历:
1、遇到"(“不处理;
2、遇到”)“弹栈,由于本题样例中只有(AB)这种情况,没有(ABC)这种情况,因此在遇到”)"后
只用弹栈两次,然后计算对应的两个矩阵相乘所需要的乘法辞书,并将相乘之后得到的矩阵的行、列
信息压到栈中;
3、遇到的是字母,则将其所对应的矩阵行列信息压入栈中;

参考

https://www.nowcoder.com/questionTerminal/15e41630514445719a942e004edc0a5b?commentTags=Python

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值