比赛的时候口胡的不知道是什么的东西。大概是根据上一列分析每一列的贡献然后累加。然后就莫名其妙的 AC 了。
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int x=0;int ch=getchar();
while (!isdigit(ch)&&(ch!=EOF)) ch=getchar();
while (isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return x;
}
int n,ans,f[5000100][2];
int main(){
n=read();
for(int i=1;i<=n;i++) f[i][0]=read();
for(int i=1;i<=n;i++) f[i][1]=read();
for(int i=2;i<=n;i++){
if(f[i-1][0]==0&&f[i-1][1]==0&&f[i][0]==0&&f[i][1]==0) ;
if(f[i-1][0]==0&&f[i-1][1]==0&&f[i][0]==0&&f[i][1]==1) ans+=1;
if(f[i-1][0]==0&&f[i-1][1]==0&&f[i][0]==1&&f[i][1]==0) ans+=1;
if(f[i-1][0]==0&&f[i-1][1]==0&&f[i][0]==1&&f[i][1]==1) ans+=1;
if(f[i-1][0]==0&&f[i-1][1]==1&&f[i][0]==0&&f[i][1]==0) ;
if(f[i-1][0]==0&&f[i-1][1]==1&&f[i][0]==0&&f[i][1]==1) ;
if(f[i-1][0]==0&&f[i-1][1]==1&&f[i][0]==1&&f[i][1]==0) ans+=1;
if(f[i-1][0]==0&&f[i-1][1]==1&&f[i][0]==1&&f[i][1]==1) ;
if(f[i-1][0]==1&&f[i-1][1]==0&&f[i][0]==0&&f[i][1]==0) ;
if(f[i-1][0]==1&&f[i-1][1]==0&&f[i][0]==0&&f[i][1]==1) ans+=1;
if(f[i-1][0]==1&&f[i-1][1]==0&&f[i][0]==1&&f[i][1]==0) ;
if(f[i-1][0]==1&&f[i-1][1]==0&&f[i][0]==1&&f[i][1]==1) ;
if(f[i-1][0]==1&&f[i-1][1]==1&&f[i][0]==0&&f[i][1]==0) ans+=1;
if(f[i-1][0]==1&&f[i-1][1]==1&&f[i][0]==0&&f[i][1]==1) ans+=1;
if(f[i-1][0]==1&&f[i-1][1]==1&&f[i][0]==1&&f[i][1]==0) ans+=1;
if(f[i-1][0]==1&&f[i-1][1]==1&&f[i][0]==1&&f[i][1]==1) ;
}
if(f[1][0]==f[1][1]) ans++;
else ans+=2;
printf("%d",ans);
}