本地RE求调
查看原帖
本地RE求调
521554
W1ngD1nGa5ter楼主2025/1/8 21:58

我是真不知道为什么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;
}
2025/1/8 21:58
加载中...