提交时间:2026-07-17 11:12:45

运行 ID: 92655

#include <iostream> #include <stack> using namespace std; typedef long long ll; void init(string &s) { int l = 0, r = 0; for (int i = 0; i < s.size(); i++) { if (s[i] == '(') l++; else if (s[i] == ')') r++; if (l < r) { s.erase(i, 1); r--; } } s += '@'; } int gety(char op) { switch (op) { case '+' : return 1; break; case '-' : return 2; break; case '*' : return 3; break; case '^' : return 4; break; } return -1; } stack <ll> ans; stack <char> st; bool isr(string s) { /* 1. 判断有没有 0~9, +, -, *, ^, (, ), 空格, a 之外的符号 2. 判断 () 是否匹配 3. 判断 () 是否紧挨在一起 */ int cntleft = 0, cntright = 0; for (int i = 0; i < s.size(); i++) { if (s[i] >= '0' && s[i] <= '9') continue; if (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '^' || s[i] == ' ' || s[i] == 'a') continue; if (s[i] == '(') { if (i != s.size() - 1) { if (s[i + 1] == ')') { return 0; } } cntleft++; } else if (s[i] == ')') { cntright++; if (cntright > cntleft) { return 0; } } else { return 0; } } if (cntleft == cntright) { return 1; } return 0; } ll pow(ll a, ll b) { ll p = 1; for (int i = 1; i <= b; i++) { p = (p * a); } return p; } void cz(char op) { if (op == '(') { return; } ll n2 = ans.top(); ans.pop(); ll n1 = ans.top(); ans.pop(); switch (op) { case '+' : ans.push(n1 + n2); break; case '-' : ans.push(n1 - n2); break; case '*' : ans.push(n1 * n2); break; case '^' : ans.push(pow(n1, n2)); break; } } ll calc(string s, int val) { init(s); bool flag = 0; //正数 ll sum = 0; for (int i = 0; i < s.size(); i++) { if (s[i] == '-' && (s[i - 1] == '(' || i == 0)) { flag = 1; } else if (s[i] == 'a') { sum = val; if (flag == 1) sum = -sum; ans.push(sum); flag = 0; sum = 0; } else if (s[i] >= '0' && s[i] <= '9') { sum = sum * 10 + s[i] - '0'; } else if (s[i - 1] >= '0' && s[i - 1] <= '9'){ if (flag == 1) sum = -sum; ans.push(sum); flag = 0; sum = 0; } if (s[i] == ')') { while (st.top() != '(') { cz(st.top()); st.pop(); } st.pop(); } else if (s[i] == '+' || (s[i] == '-' && s[i - 1] != '(' && i != 0) || s[i] == '*' || s[i] == '^') { if (st.size() != 0) { while (gety(st.top()) >= gety(s[i])) { cz(st.top()); st.pop(); if (st.size() == 0) { break; } } } st.push(s[i]); } else if (s[i] == '(') { st.push(s[i]); } } while (st.size() != 0) { cz(st.top()); st.pop(); } return ans.top(); } int main() { string s; int n; char c = getchar(); while (c != '\n' && c != '\r') { if (c != ' ') { s += c; } c = getchar(); } ll p1 = calc(s, 1145); ll p2 = calc(s, 19198); cin >> n; for (int i = 1; i <= n; i++) { s = ""; c = getchar(); while (c == '\n' || c == '\r') { c = getchar(); } while (c != '\n' && c != '\r') { if (c != ' ') { s += c; } c = getchar(); } if (!isr(s)) { continue; } if (calc(s, 1145) == p1 && calc(s, 19198) == p2) { cout << char('A' + i - 1); } } return 0; }