求调 80WA17-20
查看原帖
求调 80WA17-20
616449
China_yinyang楼主2024/12/2 21:02
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int s1[N],s2[N],t1[N],t2[N],v[N];
long long n,ans,flag;
void input()
{
	char a;
	for(int i=1;i<=n;i++){cin>>a;s1[i]=a-'0';}
	for(int i=1;i<=n;i++){cin>>a;s2[i]=a-'0';}
	for(int i=1;i<=n;i++){cin>>a;t1[i]=a-'0';}
	for(int i=1;i<=n;i++){cin>>a;t2[i]=a-'0';}
}
bool check(int i)
{
	if(t1[i]&&t1[i+1])
	{
		return true;
	}
	else
	if(t2[i]&&t2[i+1]&&t1[i])
	return true;
	if(t2[i]&&t2[i+1])
	{
		return true;
	}
	else
	if(t1[i]&&t1[i+1]&&t2[i])
	return true;
	
	return false;
}
void count(int start,int end)
{
	int s10=0,s11=0,s20=0,s21=0;
	for(int i=start;i<=end;i++)
	{
		s1[i] ? s11++ : s10++;
		s2[i] ? s21++ : s20++;
	}
	ans+=min(s11,s21)+min(s10,s20);
}
int main()
{
//	freopen("edit.in","r",stdin);
//	freopen("edit.out","w",stdout);
	int t;
	cin>>t;
	while(t--)
	{
		//ste();
		ans=0;
		flag=1;
		long long start=0,end=0;
		memset(v,0,sizeof(v));
		cin>>n;
		input();
		for(int i=1;i<=n;i++)
		{
			if(check(i))
			{
				v[i]=1;
			}
			else
			{
				v[i]=0;
			}
		}
		for(int i=1;i<=n;i++)
		{
			if(!v[i])
			{
				if(s1[i]==s2[i])
				ans++;
			}
			else
			{
				start=end=i;
				while(v[i]&&i<=n) end++,i++;
				//cout<<start<<" "<<min(end,n)<<endl;
				count(start,min(end,n));
			}
		}
		cout<<ans<<"\n";
	}
	return 0;
}
2024/12/2 21:02
加载中...