大家好,我是小黄呀。
VJ传送门
题目大意
输入n个矩阵的维度和一些矩阵乘表达式,输出乘法的次数。 例如A是m*n矩阵,B是n*p矩阵,那么AB是m*p矩阵,乘法次数为m*n*p.
思路分析
该题是一个矩阵乘法模拟的题目,类似题目首先要构建一个Matrix结构体,然后定义相关功能的函数,这样方便题目的解答。
具体代码
#include<iostream>
#include<stack>
#include<iostream>
#include<string>
using namespace std
;
struct Matrix
{
int a
,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
;
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();
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");
else
printf("%d\n",ans
);
}
return 0;
}