我是真不知道为什么RE了QwQ
有没有巨佬愿意帮帮这个小蒟蒻
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MOD = 1e9 + 7;
int n;
inline ll power(ll a, ll n, const ll &mod = MOD)
{
ll res = 1;
while (n)
{
if (n & 1)
res *= a, res %= mod;
a *= a, a %= mod;
n >>= 1;
}
return res;
}
inline ll getNum(const string &s, ll &start)
{
ll res = 0, size = s.size();
bool nage = false;
for (ll i = start; i < size; ++i)
if (isdigit(s[i]))
res = res * 10 + s[i] - '0';
else
break;
return nage ? -res : res;
}
vector<int> att; // 0:number ; 1:operator ; 2:a
vector<ll> fun;
stack<char> op;
int size;
int priority(const char &c)
{
if (c == '(')
return 0;
if (c == '+' || c == '-')
return 1;
if (c == '*')
return 2;
if (c == '^')
return 3;
return INT_MAX;
}
void read()
{
string s;
char c;
for (int i = 0; c != '\n' && c != '\r' && c != EOF; ++i)
{
cin.get(c);
if (c != ' ' && c != '\n')
s += c;
else
--i;
}
ll pos = 0, now = 0, siz = s.size();
for (ll i = 0; i < siz; ++i)
{
if (isdigit(s[i]))
pos = i,
now = getNum(s, pos),
i = pos,
fun.push_back(now),
att.push_back(0);
else if (s[i] == '(')
op.push(s[i]);
else if (s[i] == ')')
{
while (op.top() != '(')
fun.push_back(op.top()),
att.push_back(1),
op.pop();
op.pop();
}
else if (s[i] == 'a')
fun.push_back('a'),
att.push_back(2);
else if (op.empty())
op.push(s[i]);
else
{
while (priority(op.top()) >= priority(s[i]))
fun.push_back(op.top()),
att.push_back(1),
op.pop();
op.push(s[i]);
}
}
while (!op.empty())
fun.push_back(op.top()),
att.push_back(1),
op.pop();
}
ll calc(const ll &a)
{
ll Len = fun.size(), A, B;
stack<ll> cal;
for (ll i = 1; i < Len; ++i)
{
if (att[i] == 0)
cal.push(fun[i]);
else if (att[i] == 1)
{
A = cal.top();
cal.pop();
B = cal.top();
cal.pop();
if (fun[i] == '+')
cal.push((A + B) % MOD);
else if (fun[i] == '-')
cal.push((A - B + MOD) % MOD);
else if (fun[i] == '*')
cal.push(A * B % MOD);
else if (fun[i] == '^')
cal.push(power(A, B, MOD));
}
else
cal.push(a);
}
return cal.top();
}
ll value_a = 1e5 + 7;
ll value_f;
int main()
{
read();
value_f = calc(value_a);
cin >> n;
for (int i = 0; i < n; ++i)
{
read();
if (calc(value_a) == value_f)
cout << 'A' + i;
}
return 0;
}