#include <iostream> #include <vector> #include <stack> using namespace std; int main() { int n; cin >> n; vector<vector<int>> attri(n, vector<int>(2)); for (int i = 0; i < n; ++i) { cin >> attri[i][0] >> attri[i][1]; } string str; cin >> str; stack<int> matrix; int left = 0, right = 0, sum = 0; vector<int> vec; for (int i = 0; i < str.length(); ++i) { if (str[i] != ')') { if (str[i] == '(') left++; else vec.push_back(str[i]-'A'); } else { if (++right > left) break; //测试用例中有‘)’个数多于‘(’个数的情况,故加入该判断语句。 int y = vec.back(); vec.pop_back(); int x = vec.back(); vec.pop_back(); sum += attri[x][0] * attri[x][1] * attri[y][1]; attri[x][1] = attri[y][1]; vec.push_back(x); } } cout << sum << endl; return 0; } // 64 位输出请用 printf("%lld")