贪心未过样例求调!
查看原帖
贪心未过样例求调!
878013
_Supernova楼主2024/12/7 17:13

Rt.

#include <bits/stdc++.h>
using namespace std;
#define ls (id * 2)
#define rs (id * 2 + 1)
#define lowbit(x) x&(-x)
#define fi first
#define se second
typedef unsigned long long ull;
typedef long long ll;
typedef long double ld;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
const int N = 1e5 + 5;
int T, n;
int s1[N], s2[N], t1[N], t2[N];
int pos1[N], pos2[N], cnt, num1[N][2], num2[N][2];
int ans;
void init(void) {
	cnt = 0; 
	memset(pos1, 0, sizeof pos1);
	memset(pos2, 0, sizeof pos2);
	ans = 0;
	memset(num1, 0, sizeof num1);
	memset(num2, 0, sizeof num2);
	return ;
}
int main(void) {
	scanf("%d", &T);
	while (T--) {
		init();
		cin >> n;
		for (int i = 1; i <= n; ++i) {
			scanf("%1d", &s1[i]);
		}
		for (int i = 1; i <= n; ++i) {
			scanf("%1d", &s2[i]);
		}
		for (int i = 1; i <= n; ++i) {
			scanf("%1d", &t1[i]);
		}
		for (int i = 1; i <= n; ++i) {
			scanf("%1d", &t2[i]);
		}
		s1[0] = s2[0] = -1;
		cnt = 0;
		for (int i = 1; i <= n; ++i) {
			if (s1[i] != s1[i-1]) pos1[i] = ++cnt; // 记录每个位置的字符属于哪一个段。 
			else pos1[i] = pos1[i-1];
			num1[pos1[i]][s1[i]]++; // 每一个段的 0,1 个数
		}
		cnt = 0;
		for (int i = 1; i <= n; ++i) {
			if (s2[i] != s2[i-1]) pos2[i] = ++cnt;
			else pos2[i] = pos2[i-1];
			num2[pos2[i]][s2[i]]++;
		}
		for (int i = 1; i <= n; ++i) {
			if (t1[i] == 0 && t2[i] == 0) {
				if (s1[i] == s2[i]) {
					++ans;
				}
			}
			else if (t1[i] == 0) {
				if (num2[pos2[i]][s1[i]] > 0) {
					--num2[pos2[i]][s1[i]];
					++ans;
				}
			}
			else if (t2[i] == 0) {
				if (num1[pos1[i]][s2[i]] > 0) {
					--num1[pos1[i]][s2[i]];
					++ans;
				}
			}
		}
		for (int i = 1; i <= n; ++i) {
			if (t1[i] == 1 && t2[i] == 1) {
				if (num1[pos1[i]][0] > 0 && num2[pos2[i]][0] > 0) {
					--num1[pos1[i]][0], --num2[pos2[i]][0];
					++ans;
				}
				else if (num1[pos1[i]][1] > 0 && num2[pos2[i]][1] > 0) {
					--num1[pos1[i]][1], --num2[pos2[i]][1];
					++ans;
				}
			}
		}
		printf("%d\n", ans);
	}
 	return 0;
}
2024/12/7 17:13
加载中...