https://cn.vjudge.net/problem/UVA-442
分析:考察栈对简单表达式的分割。先将每个矩阵的行和列存入一个map中,键为矩阵名称,值为一个pair里面为矩阵的行和列。我们先把表达式中‘)’前的字母压入栈中,然后从栈顶pop出两个矩阵,计算乘积和,然后将矩阵乘为一个矩阵后再压入栈,依此直到表达式尾部。
代码:
#include <bits/stdc++.h>
using namespace std;
map<char, pair<int, int>> matrix;
int main() {
freopen("i.txt", "r", stdin);
int n;
cin >> n;
string str;
char ch;
for(int i = 0; i < n; i++) {
pair<int, int> p;
cin >> ch >> p.first >> p.second;
matrix[ch] = p;
}
while(cin >> str) {
stack<char> stack1;
bool flag = true;
int sum = 0;
for(int i = 0; i < str.length(); i++) {
if(isalpha(str[i])) stack1.push(str[i]);
if(str[i]==')') {
char ch2 = stack1.top();
stack1.pop();
char ch1 = stack1.top();
stack1.pop();
if(matrix[ch1].second!=matrix[ch2].first)
flag = false;
sum += matrix[ch1].first*matrix[ch2].first*matrix[ch2].second;
stack1.push(ch1+26);
matrix[ch1+26] = make_pair(matrix[ch1].first,matrix[ch2].second);
}
}
if(flag)
cout << sum << endl;
else cout << "error" << endl;
}
return 0;
}