範例程式碼 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;
}