首页 > 学院 > 开发设计 > 正文

UVa442

2019-11-06 06:40:15
字体:
来源:转载
供稿:网友
#include<cstdio>#include<stack>#include<string>#include<iostream>using namespace std;struct Matrix{int a;int b;Matrix(int a=0,int b=0):a(a),b(b){}}m[26];stack<Matrix> s;int main(){int n;cin>>n;for(int i=0;i<n;i++){string name;cin>>name;int k=name[0]-'A';cin>>m[k].a>>m[k].b;}string exPR;//输入时必须是(A(BC)),若是A(BC),只计算BC的乘法次数,因为表达式在出栈并计算只发生在遇到")"时才进行 while(cin>>expr){int len=expr.length();bool error=false;int ans=0;for(int i=0;i<len;i++){if(isalpha(expr[i]))s.push(m[expr[i]-'A']);//遇字母压入栈 else if(expr[i]==')')//遇‘)’将栈顶两元素出栈并计算,将计算后所得新矩阵再入栈 {Matrix m2=s.top();s.pop();//先出栈的是M2,后出栈的是M1,因为入栈时表达式是正的,出栈时表达式是倒的 Matrix m1=s.top();s.pop();if(m1.b!=m2.a){error=true;break;}ans+=m1.a*m1.b*m2.b;s.push(Matrix(m1.a,m2.b));}}if(error)printf("error/n");elseprintf("%d/n",ans);}return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表