442

来源:互联网 发布:aaa服务器 windows 编辑:程序博客网 时间:2024/05/21 21:01

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;  }  


0 0