题目:给你一些矩阵,以及他们饿运算式,计算运算结果。
分析:模拟,写一个矩阵计算器。递归或者用栈实现。
说明:(2011-09-19 09:47)。
#include <iostream>
#include <cstring>
using namespace std;
struct node
{
int L,R;
long long V;
}Matrix[ 27 ],Error;
bool Flag;
node Calculate( char* Data, int s, int e )
{
int count = 0;
node Save[ 2 ];
for ( int i = s ; i <= e ; ++ i )
if ( Data[ i ] == '(' ) {
int start = i + 1;
int untop = 1;
while ( untop && ++ i ) {
if ( Data[ i ] == '(' ) ++ untop;
if ( Data[ i ] == ')' ) -- untop;
}
Save[ count ++ ] = Calculate( Data, start, i-1 );
if ( Flag ) return Error;
}else
Save[ count ++ ] = Matrix[ Data[ i ]-'A' ];
node Now = Save[ 0 ];
for ( int i = 1 ; i < count ; ++ i ) {
if ( Now.R != Save[ i ].L ) {
Flag = true;
return Error;
}
Now.V = Now.V + Save[ i ].V + Now.L*Now.R*Save[ i ].R;
Now.R = Save[ i ].R;
}
return Now;
}
char Data[ 260 ];
int main()
{
int n;
char C;
cin >> n;
for ( int i = 0 ; i < n ; ++ i ) {
cin >> C; //从后向前运算的,写在一起就 RE 了。。。
cin >> Matrix[ C-'A' ].L >> Matrix[ C-'A' ].R;
Matrix[ C-'A' ].V = 0LL;
}
while ( cin >> Data ) {
Flag = false;
node Answer = Calculate( Data, 0, strlen( Data )-1 );
if ( Flag )
cout << "error" << endl;
else
cout << Answer.V << endl;
}
return 0;
}