样例全错但AC???
查看原帖
样例全错但AC???
891606
2023gdgz01楼主2023/10/9 18:16

仿照第一篇题解的思路。

样例一输出:

11

0 00\text{ }0

样例二输出:

00

0 00\text{ }0

(害得我调了一小时)

Code:

#include <iostream>
#include <string>

using namespace std;

int len, cur, ans1, ans2, opt1[1000005], opt2[1000005], pos1[1000005], pos2[1000005];
string s;

int dfs(int l, int r)
{
	if (pos1[r] >= l)
	{
		int temp = dfs(l, pos1[r] - 1);
		if (temp == 1)
		{
			++ans2;
			return 1;
		}
		return temp | dfs(pos1[r] + 1, r);
	}
	if (pos2[r] >= l)
	{
		int temp = dfs(l, pos2[r] - 1);
		if (!temp)
		{
			++ans1;
			return 0;
		}
		return temp & dfs(pos2[r] + 1, r);
	}
	if (s[l] == '(' && s[r] == ')')
	{
		return dfs(l + 1, r - 1);
	}
	return s[l] - '0';
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> s;
	len = s.size();
	s = ' ' + s;
	for (register int i = 1; i <= len; ++i)
	{
		switch (s[i])
		{
			case '(':
			{
				++cur;
				break;
			}
			case ')':
			{
				--cur;
				break;
			}
			case '|':
			{
				opt1[cur] = i;
				break;
			}
			case '&':
			{
				opt2[cur] = i;
				break;
			}
		}
		pos1[i] = opt1[cur];
		pos2[i] = opt2[cur];
	}
	cout << dfs(1, len) << "\n" << ans1 << " " << ans2 << "\n";
	return 0;
}

AC记录

有没有dalao帮帮我?

2023/10/9 18:16
加载中...