//40行 #include<iostream> #include<string> #include<stack> //stack用于字符串的存取处理 using namespace std; int main() { int num=0; string str; while(cin>>num) { int v[num*2]; for(int i=0;i<num>>v[i]; cin>>str; //以上步骤用于获取输入,变量有num、v、str int res=0; //存放最终的计算总数 int len=str.length(); stack<char> s1; //栈s1存放第一次遍历的字符 for(int i=len-1;i>=0;--i) //遍历字符串 { if(str[i]=='(') //如果遇到左括号'('就开始处理,否则压入s1 { char c=s1.top(); int first=c-'A'; s1.pop(); int sum=0; //记录一对括号内的计算次数 while(s1.top()!=')') { int num1=s1.top()-'A'; //记录第二个矩阵的位置信息 s1.pop(); //已经计算过的矩阵出栈 sum=sum+v[first*2]*v[num1*2]*v[num1*2+1]; //当前矩阵计算次数之和 v[first*2+1]=v[num1*2+1]; //更新第一个矩阵的大小 } s1.pop(); //s1内的右括号')'出栈 s1.push(c); //压入第一个矩阵 res+=sum; //计算总数 }else s1.push(str[i]); } cout<<res><</res></char></num></stack></string></iostream>
1

相关推荐

牛客网
牛客企业服务