书上的代码
#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;
}
我的代码
#include <iostream>
#include <map>
#include <string>
#include <cstdio>
#include <stack>
#include <cctype>
using namespace std;
int main()
{
int num;
pair<int,int> p[27];
char ch;
scanf("%d",&num);
int tmp;
for(int i=0;i<num;++num)
{
cin>>ch;
tmp=ch-'A';
cin>>p[tmp].first>>p[tmp].second;
}
string str;
while(cin>>str)
{
stack<pair<int,int> > s;
int lenth=str.size();
bool flag=false;
int res=0;
for(int i=0;i<lenth;++i)
{
if(isalpha(str[i]))
{
s.push(p[str[i]-'A']);
}
else if(str[i]==')')
{
pair<int,int> t1=s.top();
s.pop();
pair<int,int> t2=s.top();
s.pop();
if(t2.second!=t1.first)
{
flag=true;
break;
}
res+=t2.first*t2.second*t1.first;
}
}
if(flag)
printf("error\n");
else
printf("%d\n",res);
}
return 0;
}
我的就超时= =