1
题意。
2
注意,char bs; int temp = bs-65; 而不是,bs-'65'。
3
#include <iostream>
#include <string.h>
#include <math.h>
#include <stdio.h>
#include <stack>
using namespace std;
const int maxn=1100;
struct Matrix{
int row,col;
}matrix[maxn];
stack<int> ss;
int num;
int Judge(int cur1,int cur2){
//return matrix[cur1].col==matrix[cur2].row?1:0;
if(matrix[cur1].col==matrix[cur2].row) return 1;
else return 0;
}
void Hebing(int cur1,int cur2,int &sum){
sum+=(matrix[cur1].row*matrix[cur1].col)*matrix[cur2].col;
matrix[num].row=matrix[cur1].row;
matrix[num].col=matrix[cur2].col;
ss.push(num);
//cout<<"Note: "<<ss.top()<<endl;
num++;
}
int main()
{
int kk;
scanf("%d",&kk);
memset(matrix,0,sizeof(matrix));
char bs;
int temp=0;
for(int i=1;i<=kk;i++){
cin>>bs;
//cout<<"bs"<<bs<<endl;
temp=bs-65;///!!! wrong: bs-'65'
//cout<<"temp: "<<temp<<endl;
cin>>matrix[temp].row>>matrix[temp].col;
}
char com[110];
int cur1,cur2;
num=27;
while(~scanf("%s",com)){
while(!ss.empty()) ss.pop();
int endd=0;
int sum=0;
if(strlen(com)==1){
cout<<"0"<<endl;
continue;
}
else{
for(int i=0;i<strlen(com);i++){
if(com[i]=='(') ;
else if(com[i]==')'){
cur2=ss.top();ss.pop();
cur1=ss.top();ss.pop();
if(Judge(cur1,cur2)==0){
//cout<<"cur1: "<<cur1<<" cur2:"<<cur2<<endl;
cout<<"error"<<endl;
endd=1;
break;
}
else{
//cout<<"cur1: "<<cur1<<" cur2:"<<cur2<<endl;
Hebing(cur1,cur2,sum);
}
}
else{
ss.push(com[i]-65);
}
}
if(!endd){
//cout<<"***"<<endl;
cout<<sum<<endl;
//cout<<"***"<<endl;
}
}
}
return 0;
}