此处一定要注意当遇到后括号的时候就计算,因为一对括号中至多包含两个矩阵,及时去掉括号,还是看了clevermike的博客后才弄懂的
#include<iostream>
#include<string>
#include<stdio.h>
#include<stack>
using namespace std;
int n;
struct Node
{
int l,r;
}node[300];
char ch;
int a,b,ans,t,i;
string str;
stack<int>s1;
stack<char>s2;
int main()
{
cin>>n;
while(n--)
{
cin>>ch>>a>>b;
node[ch-'A'].l=a;node[ch-'A'].r=b;
}
getchar();
while(getline(cin,str))
{
ans=0;t=31;
int len=str.length();
for( i=0;i<len;i++)
{
if(str[i]=='('||str[i]==')')
{
s2.push(str[i]);
if(str[i]==')')
{
if(!s1.empty())
{
int g,h;
h=s1.top();s1.pop();
g=s1.top();s1.pop();
if(node[g].r!=node[h].l)break;
ans+=node[g].l*node[g].r*node[h].r;
node[t].l=node[g].l;
node[t].r=node[h].r;
s1.push(t);
t++;
s2.pop();s2.pop();
}
}
}
else s1.push(str[i]-'A');
}
if(i<len)cout<<"error"<<endl;
else cout<<ans<<endl;
}
}