题解:
处理出一个
c
i
=
(
b
i
−
a
i
)
 
m
o
d
 
4
c_i = (b_i - a_i) \bmod 4
ci=(bi−ai)mod4,然后差分一下
c
c
c,贪心即可。
#include <bits/stdc++.h>
using namespace std;
typedef pair <int,int> pii;
const int RLEN=1<<18|1;
inline char nc() {
static char ibuf[RLEN],*ib,*ob;
(ib==ob) && (ob=(ib=ibuf)+fread(ibuf,1,RLEN,stdin));
return (ib==ob) ? -1 : *ib++;
}
inline int rd() {
char ch=nc(); int i=0,f=1;
while(!isdigit(ch)) {if(ch=='-')f=-1; ch=nc();}
while(isdigit(ch)) {i=(i<<1)+(i<<3)+ch-'0'; ch=nc();}
return i*f;
}
const int N=1e5+50;
int n,a[N],b[N];
inline void solve() {
n=rd();
for(int i=1;i<=n;i++) a[i]=rd();
for(int i=1;i<=n;i++) b[i]=rd();
for(int i=1;i<=n;i++) a[i]=(b[i]-a[i]+4)%4;
for(int i=n;i>=2;i--) a[i]-=a[i-1];
int c2=0, c3=0, ans=0;
for(int i=1;i<=n;i++) {
if(a[i]>1) {
if(a[i]==2) {
if(c3) --c3, ans++, ++c2;
else ans+=2;
} else {
if(c3) --c3, ans++;
else if(c2) --c2, ans+=2;
else ans+=3;
}
} else if(a[i]==1) ans++;
else if(abs(a[i])>1) (abs(a[i])==2) ? ++c2 : ++c3;
} cout<<ans<<'\n';
}
int main() {
for(int i=rd();i;i--) solve();
}