题目连接:http://poj.org/problem?id=2246
题目大意:给定n 个矩阵,求出这些矩阵的运算次数
思路:通过“)”号断定需要运算的两个矩阵,并将计算的次数加入total,否则将矩阵入栈。
#include"iostream"
#include"stack"
#include"cstring"
using namespace std;
struct node{
int row;
int col;
}letters[26];//字母阵
int main(){
int n;
char ch;
char s[110];
while(scanf("%d",&n) != EOF){//储存对应矩阵
getchar();
while(n -- ){
scanf("%c",&ch);
int index = ch - 'A';
scanf("%d%d",&letters[index].row,&letters[index].col);
getchar();
}
stack<node> stn;
while(scanf("%s",&s) !=EOF){//输入需要运算的多个矩阵
getchar();
bool flag = true;
int total = 0;
int len = strlen(s);
for(int i = 0;i < len;i++){
if(s[i] == ')'){
node t1 = stn.top();
stn.pop();
node t2 = stn.top();
stn.pop();
if(t1.row != t2.col){//q != r
flag = false;
break;
}
total += t2.row * t2.col * t1.col;
node t;
t.row = t2.row;
t.col = t1.col;
stn.push(t);//相乘后的矩阵再次入栈
}else if(s[i] != '('){//字母入栈
stn.push(letters[s[i] - 'A']);
}
}
if(!flag)
printf("error\n");
else
printf("%d\n",total);
}
}
return 0;
}