#include <iostream>
#include <stack>
using namespace std;
struct Matrix {
char ch;
int row;
int col;
};
//使用栈的特性(先进后出),忽略'(',遇到矩阵则入栈,遇到')'则将栈顶两个矩阵取出,计算乘积,并入栈
int main() {
int num = 0;
cin >> num;
Matrix mvec[num];
for(int i = 0; i < num; i++)
cin >> mvec[i].ch >> mvec[i].row >> mvec[i].col;
stack<Matrix> chstack;
string line;
while(cin >> line) {
long sum = 0;
Matrix temp;
char c;
bool flag = false;
for(int i = 0; i < line.size(); i++) {
c = line[i];
if(c >= 'A' & c <='Z') {
for(int j = 0; j < num; j++)
if(mvec[j].ch == c)
chstack.push(mvec[j]);
}
if(c == ')') {
Matrix second = chstack.top();
chstack.pop();
Matrix first = chstack.top();
chstack.pop();
if(first.col != second.row) {
flag = true;
break;
}
sum += first.row * first.col * second.col;
temp.ch = '*';
temp.row = first.row;
temp.col = second.col;
chstack.push(temp);
}
}
if(flag) cout << "error" << endl;
else cout << sum << endl;
while(!chstack.empty()) chstack.pop(); //将栈清空,以便下次使用!!!!
}
return 0;
}
zoj 1094 Matrix Chain Multiplication
最新推荐文章于 2019-09-26 19:42:29 发布