需要注意的是出栈的时候一次出俩,后进的先出,所以在判断的时候应该是先出的那个的行和后出的那个的列比
import java.util.Scanner;
import java.util.Stack;
public class UVA442 {
static class matrix{
char c;
int a,b;
int sum=0;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
matrix m[]=new matrix[50005];
for (int i = 0; i < n; i++) {
m[i]=new matrix();
m[i].c=sc.next().charAt(0);
m[i].a=sc.nextInt();
m[i].b=sc.nextInt();
m[i].sum=0;
}
while(sc.hasNext()){
String s1=sc.next();
if(s1.length()==1) System.out.println(0);
else {
int sum=0;boolean flag=true;
Stack<matrix> stack=new Stack<>();
for (int i = 0; i < s1.length(); i++) {
if(s1.charAt(i)!='('&&s1.charAt(i)!=')'){
stack.push(m[s1.charAt(i)-'A']);
}
if(s1.charAt(i)==')'){
matrix a1=stack.pop();
matrix b1=stack.pop();
if(a1.a!=b1.b){
flag=false;
break;
}
matrix ma=new matrix();
ma.a=b1.a;
ma.b=a1.b;
ma.sum=b1.a*b1.b*a1.b;
stack.push(ma);
sum+=ma.sum;
}
}
if(flag)System.out.println(sum);
else System.out.println("error");
}
}
}
}