#include <cstdio>
#include <iostream>
#include <string>
#include <stack>
using namespace std;
struct Matrix{
int a,b;//行号、列号
Matrix(int a=0,int b=0):a(a),b(b) {}
}m[26];//26个字母代表的矩阵
stack<Matrix> s;
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
string name;
cin>>name;
int k=name[0]-'A';
cin>>m[k].a>>m[k].b;
}//矩阵信息录入完毕
string expr;
while(cin>>expr){
int len=expr.length();
bool error=false;
int ans=0;
for(int i=0;i<len;i++){
if(isalpha(expr[i]))
s.push(m[expr[i]-'A']);
else if(expr[i]==')'){
Matrix m1=s.top();//后面矩阵
s.pop();
Matrix m2=s.top();//前面矩阵
s.pop();
if(m2.b!=m1.a){
error=true;
break;
}
else{
ans+=m2.a*m2.b*m1.b;
s.push(Matrix(m2.a,m1.b));
}
}
}
if(error){
printf("error\n");
}
else
printf("%d\n",ans);
}
return 0;
}
}
栈-Matrix Chain Multiplication (UVa 442)
最新推荐文章于 2024-04-24 17:08:18 发布