一个小问题
查看原帖
一个小问题
532745
Nangu楼主2023/8/31 20:44
#include <bits/stdc++.h>

#define int long long

using namespace std;

const int MAXN = 1e6 + 7;

char s[MAXN];

int sum_or, sum_and, tag_or[MAXN], tag_and[MAXN], last_or[MAXN], last_and[MAXN];
int len;

bool dfs(int l, int r) {
	if (l == r)
		return s[l] - '0';
	if (tag_or[r] > l) {
		int tmp1 = dfs(l, tag_or[r] - 1);
		if (tmp1) {
			sum_or++;
			return 1;
		}
		return dfs(tag_or[r] + 1, r);
	}
	if (tag_and[r] > l) {
		int tmp1 = dfs(l, tag_and[r] - 1);
		if (!tmp1) {
			sum_and++;
			return 0;
		}
		return dfs(tag_and[r] + 1, r);
	}
	if (s[l] == '(' && s[r] == ')') 
		return dfs(l + 1, r - 1);
}

signed main() {
	freopen("expr4.in", "r", stdin);
	scanf("%s", s);
	int deep = 1;
	len = strlen(s);
	for (int i = 0; i < len; i++) {
		if (s[i] == '(') deep++;
		if (s[i] == ')') deep--;
		if (s[i] == '|') last_or[deep] = i;
		if (s[i] == '&') last_and[deep] = i;
		tag_or[i] = last_or[deep];
		tag_and[i] = last_and[deep];
	}
	cout << dfs(0, strlen(s) - 1) << endl << sum_and << ' ' << sum_or;
	return 0;
}

这样做是对的

#include <bits/stdc++.h>

#define int long long

using namespace std;

const int MAXN = 1e6 + 7;

char s[MAXN];

int sum_or, sum_and, tag_or[MAXN], tag_and[MAXN], last_or[MAXN], last_and[MAXN];
int len;

bool dfs(int l, int r) {
	if (l == r)
		return s[l] - '0';
	if (s[l] == '(' && s[r] == ')')//这里
		return dfs(l + 1, r - 1);
	if (tag_or[r] > l) {
		int tmp1 = dfs(l, tag_or[r] - 1);
		if (tmp1) {
			sum_or++;
			return 1;
		}
		return dfs(tag_or[r] + 1, r);
	}
	if (tag_and[r] > l) {
		int tmp1 = dfs(l, tag_and[r] - 1);
		if (!tmp1) {
			sum_and++;
			return 0;
		}
		return dfs(tag_and[r] + 1, r);
	}
}

signed main() {
	freopen("expr4.in", "r", stdin);
	scanf("%s", s);
	int deep = 1;
	len = strlen(s);
	for (int i = 0; i < len; i++) {
		if (s[i] == '(') deep++;
		if (s[i] == ')') deep--;
		if (s[i] == '|') last_or[deep] = i;
		if (s[i] == '&') last_and[deep] = i;
		tag_or[i] = last_or[deep];
		tag_and[i] = last_and[deep];
	}
	cout << dfs(0, strlen(s) - 1) << endl << sum_and << ' ' << sum_or;
	return 0;
}

把那块代码提前了一下,就WA了,这是为什么qwq

2023/8/31 20:44
加载中...