求助 70 分 WA on #2#6#8
查看原帖
求助 70 分 WA on #2#6#8
731925
happy_zero楼主2023/8/23 15:03

rt,代码如下:

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int Mod = 10007;
struct node {
	int s0, s1;
};
stack <node> num;
stack <char> t;
string s;
int level(char x) {
	if (x == '+') return 1;
	if (x == '*') return 2;
	return -1;
}
node res() {
	node x = num.top(); num.pop();
	node y = num.top(); num.pop();
	node res;
	char op = t.top(); t.pop();
	if (op == '+') {
		res.s0 = x.s0 * y.s0 % Mod;
		res.s1 = (x.s1 * y.s0 % Mod + x.s0 * x.s1 % Mod + x.s1 * y.s1 % Mod) % Mod;
	}
	else {
		res.s0 = (x.s0 * y.s0 % Mod + x.s1 * y.s0 % Mod + x.s0 * y.s1 % Mod) % Mod;
		res.s1 = x.s1 * y.s1 % Mod;
	}
	return res;
}
int cal() {
	int n = s.size();
	for (int i = 0; i < n; i++) {
		if (s[i] == '(') t.push(s[i]);
		else if (s[i] == ')') {
			while (!t.empty() && t.top() != '(') num.push(res());
			t.pop();
		}
		else {
			while (!t.empty() && level(t.top()) >= level(s[i])) num.push(res());
			t.push(s[i]);
		}
		if (s[i] != ')' && s[i + 1] != '(') num.push({1, 1});
	}
	return num.top().s0;
}
signed main() {
	int n; cin >> n;
	cin >> s; 
	s = "(" + s + ")";
	cout << cal();
	return 0;
}

提交记录:https://www.luogu.com.cn/record/122385645

2023/8/23 15:03
加载中...