#include<stdio.h> #include<string.h> struct Matrix{ char name; int r,l; };//建立结构体 struct Matrix a[30], b[30]; char str[1000] = {'\0'}; int n, i, t, top, sum, len; bool flag; void judge() { if(!top) return ;//top为0时直接退出(这时桟里面只有一个元素) if(b[top - 1].l != b[top].r) { flag = false; return; }//判断是否可以相乘 if(flag == true) { sum += b[top - 1].r * b[top].r * b[top].l; b[top - 1].l = b[top].l; -- top; }//计算相乘总数,然后将后一个的左值赋予前一个的左值,top指向前一个 } int main(){ scanf("%d", &n); getchar(); for(i = 0;i < n; i++) { scanf("%c %d %d", &a[i].name, &a[i].r, &a[i].l); getchar(); }//记得要用getchar吸收回车 while(scanf("%s", str) == 1){ len = strlen(str); sum = 0; top = -1; flag = true; for(i = 0;i < len; i++) { if(str[i] == '(') continue; if(str[i] == ')') { judge(); if(!flag) break;//如果judge中两个元素前后的左右值不同,直接跳出循环 } else { for(t = 0;t < n; t++) if(a[t].name == str[i]) break; b[++top].r = a[t].r; b[top].l = a[t].l;//判断开头的字母,给桟里面的元素赋值 } } if(flag) printf("%d\n", sum); else printf("error\n"); } return 0; }