UVA-442(紫书上例题6-3); 点击打开链接
#include <stack>
#include <cstdio>
#include <cstring>
using namespace std;
struct SMatrix {
int row;
int col;
static int count;
};
int SMatrix::count = 0;
bool error;
SMatrix mulMatrix(const SMatrix &, const SMatrix &);
int main()
{
SMatrix matrix[26];
memset(matrix, 0, sizeof(matrix));
//enter
int n;
scanf("%d%*c", &n);
for (int i = 0; i < n; i++) {
char ch;
scanf("%c", &ch);
scanf("%d%d%*c", &matrix[ch-'A'].row, &matrix[ch-'A'].col);
}
char ch;
stack<SMatrix> staMat;
error = false;
while (scanf("%c", &ch) != EOF) {
if (ch == '\n') {
if (error) {
printf("error\n");
}else {
printf("%d\n", SMatrix::count);
}
SMatrix::count = 0;
error = false;
}
if (ch >= 'A' && ch <= 'Z') {
staMat.push(matrix[ch-'A']);
}
if (ch == ')' && staMat.size() > 1) {
SMatrix left, right, rslt;
right = staMat.top();
staMat.pop();
left = staMat.top();
staMat.pop();
rslt = mulMatrix(left, right);
staMat.push(rslt);
}
}
return 0;
}
SMatrix mulMatrix(const SMatrix &left, const SMatrix &right)
{
if (left.col != right.row) {
error = true;
return left;
}else {
SMatrix::count += left.row * left.col * right.col;
}
SMatrix rslt;
rslt.row = left.row;
rslt.col = right.col;
return rslt;
}