UVA442

#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)