範例程式碼 uva442
//uva442
#include <iostream>
#include <vector>
#include <stack>
#include <string>
using namespace std;
int main() {
int n, row1, col1, row2, col2, flag;
long long total;
char c;
string s;
vector< vector<int> > matrix(26);
vector<int> temp;
stack<int> stk;
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> c >> row1 >> col1;
matrix[ c - 'A' ].push_back(row1);
matrix[ c - 'A' ].push_back(col1);
}
while (cin >> s) {
flag = 0;
total = 0;
n = s.length();
if (n == 1) {
cout << "0\n";
continue;
}
for (int i = 0; i < n; ++i) {
if (s[i] == '(')
stk.push(-2);
else if (s[i] == ')') {
while (stk.top() != -2) {
temp.push_back(stk.top());
stk.pop();
}
stk.pop();
row1 = matrix[ temp[1] ][0];
col1 = matrix[ temp[1] ][1];
row2 = matrix[ temp[0] ][0];
col2 = matrix[ temp[0] ][1];
temp.clear();
if (col1 == row2) {
total += row1 * col1 * col2;
matrix.push_back( vector<int>{row1, col2} );
stk.push(matrix.size() - 1);
}
else {
flag = 1;
break;
}
}
else
stk.push(s[i] - 'A');
}
if (flag == 1)
cout << "error\n";
else
cout << total << endl;
}
return 0;
}