找不到哪错了,50 pts
查看原帖
找不到哪错了,50 pts
1039211
Wendy_Hello_qwq楼主2024/10/17 19:17
#include <cstdio>
const int N = 100005, M = 10007;
using namespace std;
char s[N];
int l, k, t, n_0[N], n_1[N], ans[2 * N], str[N];
int main() {
	scanf ("%d", &l);
	scanf ("%s", s);
	ans[++k] = '.';
	for (int i = 0; s[i]; i++) {
		if (s[i] == '(' || s[i] == '*')
			str[++t] = s[i];
		if (s[i] == '+') {
			while (str[t] == '*')
				ans[++k] = str[t--];
			str[++t] = s[i];
		}
		if (s[i] == ')') {
			while (str[t] != '(')
				ans[++k] = str[t--];
			t--;
		}
		if (s[i] != '(' && s[i] != ')')
			ans[++k] = '.';
	}
	while (t > 0)
		ans[++k] = str[t--];
	for (int i = 1; i <= k; i++) {
		if (ans[i] == '.') {
			n_0[++t] = 1;
			n_1[t] = 1;
		}
		if (ans[i] == '*') {
			t--;
			n_0[t] = (n_0[t] * n_0[t + 1] + n_0[t] * n_1[t + 1] + n_1[t] * n_0[t + 1]) % M;
			n_1[t] = n_1[t] * n_1[t + 1] % M;
		}
		if (ans[i] == '+') {
			t--;
			n_0[t] = n_0[t] * n_0[t + 1] % M;
			n_1[t] = (n_0[t] * n_1[t + 1] + n_1[t] * n_0[t + 1] + n_1[t] * n_1[t + 1]) % M;
		}
	} 
	printf ("%d", n_0[1]);
	return 0;
}
2024/10/17 19:17
加载中...