#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;
}
UVA442
最新推荐文章于 2022-11-21 14:59:18 发布