多测不清空。。。。问题是我都不知道清空什么
  • 板块灌水区
  • 楼主__O_w_O__
  • 当前回复7
  • 已保存回复7
  • 发布时间2024/11/9 14:47
  • 上次更新2024/11/9 16:54:59
查看原帖
多测不清空。。。。问题是我都不知道清空什么
1053567
__O_w_O__楼主2024/11/9 14:47
#include <bits/stdc++.h>
using namespace std;

const int N = 100010;
char v[N][5], a[N];
int x[N], y[N], n, m;

namespace sub1 {
	char b[N], c[N];
	int ans = 1e9;
	bool check() {
		for (int i = 1; i <= n; i++) c[i] = b[i];
		for (int i = 1; i <= m; i++) {
			if (v[i][0] == 'F' || v[i][0] == 'T' || v[i][0] == 'U') {
				c[x[i]] = v[i][0];
			}
			else if (v[i][0] == '+') {
				c[x[i]] = c[y[i]];
			}
			else {
				char tmp = c[y[i]];
				if (tmp == 'T') tmp = 'F';
				else if (tmp == 'F') tmp = 'T';
				c[x[i]] = tmp;
			}
		}
		for (int i = 1; i <= n; i++) {
			if (b[i] != c[i]) return false;
		}
		return true;
	}
	void dfs(int cnt) {
		if (cnt == n + 1) {
			if (check()) {
				int flag = 0;
				for (int i = 1; i <= n; i++) {
					if (b[i] == 'U') flag++;
				}
				ans = min(ans, flag);
			}
			return ;
		}
		b[cnt] = 'T';
		dfs(cnt + 1);
		b[cnt] = 'F';
		dfs(cnt + 1);
		b[cnt] = 'U';
		dfs(cnt + 1);
	}
	void solve() {
		dfs(1);
		printf("%d\n", ans);
	}
}
int main() {
	int c, t;
	scanf("%d%d", &c, &t);
	while(t--) {
		scanf("%d%d", &n, &m);
		for (int i = 1; i <= m; i++) {
			scanf("%s", v[i]);
			if (v[i][0] == '+' || v[i][0] == '-') {
				scanf("%d%d", &x[i], &y[i]);
			}
			else scanf("%d", &x[i]);
		}
		if (c == 1 || c == 2) sub1::solve();
	}
	return 0; 
}

这份代码,先不要管复杂度的问题

对于这个数据

1 3
3 3
- 2 1
- 3 2
+ 1 3
3 3
- 2 1
- 3 2
- 1 3
2 2
T 2
U 2

实测一个一个测试是可以过的,但是多测就出问题了,看了半天觉得代码都是直接覆盖值的也不知道哪里需要清空啊

求助QAQ

2024/11/9 14:47
加载中...