一、题目:
输入描述:
输入多行,先输入要计算乘法的矩阵个数n,每个矩阵的行数,列数,总共2n的数,最后输入要计算的法则
计算的法则为一个字符串,仅由左右括号和大写字母('A'~'Z')组成,保证括号是匹配的且输入合法!
输出描述:
输出需要进行的乘法次数
二、输入输出示例:
三、代码:
#include<iostream>
using namespace std;
#include<vector>
#include<stack>
#include<string>
int main()
{
int N;
while(cin>>N){
int num1,num2;
vector<pair<int,int>> v(N);
for(int i=0;i<N;i++){
cin>>v[i].first>>v[i].second;
}
string s;
cin>>s;
stack<char> input;
int sum = 0;
int flag = 0;
vector<pair<int,int>> v1(N);
for(int i=0;i<s.size();i++){
if(s[i] == '('){
input.push(s[i]);
}
else if(s[i] >= 'A' && s[i] <= 'Z'){
input.push(s[i]);
v1.push_back(make_pair(v[s[i]-'A'].first,v[s[i]-'A'].second));
}
else{
while(input.top() != '('){
int temp = v1.back().first * v1.back().second;
int y = v1.back().second;
v1.pop_back();
sum += temp * v1.back().first;
v1.back().second = y;
if(flag == 0){
input.pop();
input.pop();
flag = 1;
}
else{
input.pop();
}
}
input.pop();
}
}
cout<<sum<<endl;
}
system("pause");
return 0;
}