#include #define int long long using namespace std; int n; string s1,s2,t1,t2; const int N=1e5; int d1[N+5],d2[N+5]; int ccf1[N+5],ccf2[N+5]; void solve(){ cin>>n>>s1>>s2>>t1>>t2; s1=' '+s1; s2=' '+s2; t1=' '+t1; t2=' '+t2; int cnt1=0,cnt2=0,len1=0,len2=0,num1=0,num2=0; for(int i=1;i<=n;i++){ if(t1[i]=='0'){ if(len1){ d1[++cnt1]=len1; ccf1[cnt1]=num1; } d1[++cnt1]=1; ccf1[cnt1]=(s1[i]-'0'); len1=num1=0; } else{ num1+=(s1[i]-'0'); len1++; } if(t2[i]=='0'){ if(len2){ d2[++cnt2]=len2; ccf2[cnt2]=num2; } d2[++cnt2]=1; ccf2[cnt2]=(s2[i]-'0'); len2=num2=0; } else{ num2+=(s2[i]-'0'); len2++; } } if(len1){ d1[++cnt1]=len1; ccf1[cnt1]=num1; } if(len2){ d2[++cnt2]=len2; ccf2[cnt2]=num2; } int l=1,r=1; int ans=0; while(l<=cnt1&&r<=cnt2){ if(d1[l]>=d2[r]){ d1[l]-=d2[r]; if(ccf1[l]>=ccf2[r]){ ans+=max(0ll,ccf1[l]-ccf2[r]-d1[l]); ccf1[l]=min(ccf1[l]-ccf2[r],d1[l]); } else{ ans+=ccf2[r]-ccf1[l]; ccf1[l]=0; } r++; } if(d1[l]<=d2[r]){ d2[r]-=d1[l]; if(ccf2[r]>=ccf1[l]){ ans+=max(0ll,ccf2[r]-ccf1[l]-d2[r]); ccf2[r]=min(ccf2[r]-ccf1[l],d2[r]); } else{ ans+=ccf1[l]-ccf2[r]; ccf2[r]=0; } l++; } } cout<>T; while(T--) solve(); return 0; } /* 呜呜呜,T1 不会做。 AFO 了。 for(int i=1;i<=cnt1;i++){ cout<