怎么挂了,求调
查看原帖
怎么挂了,求调
800499
suzhikz楼主2024/12/2 13:49
#include<bits/stdc++.h>
#define ll long long
#define reg register
#define db double
#define il inline
using namespace std;
void read(int &x){x=0;int f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}x*=f;}
void read(ll &x){x=0;int f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}x*=f;}
const int N=1e5+5;
int t,n;
int r1[N],r2[N],cnt1[N][2],cnt2[N][2];
char c1[N],c2[N],d1[N],d2[N];
int main(){
//	freopen("edit2.in","r",stdin);
	read(t);
	while(t--){
		int ans=0;
		read(n);
		scanf("%s",c1+1);scanf("%s",c2+1);
		scanf("%s",d1+1);scanf("%s",d2+1);
		memset(cnt1,0,sizeof(cnt1));memset(cnt2,0,sizeof(cnt2));
		d1[n+1]='0';d2[n+1]='0';
		c1[n+1]='0';c2[n+1]='0';n++; 
		for(int i=n;i>=1;i--){
			if(d1[i]=='0')r1[i]=i;
			else r1[i]=r1[i+1];
			if(d2[i]=='0')r2[i]=i;
			else r2[i]=r2[i+1];
		}
		for(int i=1;i<=n;i++){
			if(d1[i]=='1')cnt1[i][c1[i]-'0']++;
			if(d2[i]=='1')cnt2[i][c2[i]-'0']++;
			cnt1[i][0]+=cnt1[i-1][0];cnt1[i][1]+=cnt1[i-1][1];
			cnt2[i][0]+=cnt2[i-1][0];cnt2[i][1]+=cnt2[i-1][1];
		}
		int l1=1,t1=0,l2=1,t2=0;
		int now1[2]={0},now2[2]={0};
		int summ=0;
		for(int i=1;i<=n;i++){
			if(t1<i){
				l1=t1+1;t1=r1[l1];
				now1[0]=cnt1[t1][0]-cnt1[l1-1][0];
				now1[1]=cnt1[t1][1]-cnt1[l1-1][1];
				ans+=summ;summ=0;
			}
			if(t2<i){
				l2=t2+1;t2=r2[l2];
				now2[0]=cnt2[t2][0]-cnt2[l2-1][0];
				now2[1]=cnt2[t2][1]-cnt2[l2-1][1];
				ans+=summ;summ=0;
			}
			if(d1[i]=='0'&&d2[i]=='0'){
				if(c1[i]==c2[i])ans++;
			}else if(d1[i]=='0'){
				if(now2[c1[i]-'0']){
					now2[c1[i]-'0']--;ans++;
				}
			}else if(d2[i]=='0'){
				if(now1[c2[i]-'0']){
					now1[c2[i]-'0']--;ans++;
				}
			}else{
				summ++;
			}
			if(min(now1[0],now2[0])<summ){
				if(now1[1]&&now2[1]){
					now1[1]--;now2[1]--;ans++;summ--;
				}else{
					summ=min(now1[0],now2[0]);
				}
			}else if(min(now2[1],now1[1])<summ){
				if(now1[0]&&now2[0]){
					now1[0]--;now2[0]--;ans++;summ--;
				}else{
					summ=min(now2[1],now1[1]);
				}
			}
//			cout<<i<<' '<<ans<<' '<<summ<<endl;
//			cout<<now1[0]<<' '<<now1[1]<<' '<<now2[0]<<' '<<now2[1]<<endl;
		}
		cout<<ans-1<<endl;
	}
	
	return 0;
}

2024/12/2 13:49
加载中...