卡了好久的常才卡过,length() 的常数太坑了。。
#include<bits/stdc++.h>
#define int long long
using namespace std;
string a[1000001],s,ps;
int n,b[1000001],cnt1,cnt2,ans1,ans2,len[1000001],sb=0,qwq,S,used,lens,lenp;
char cur;
set<int> q1,q2;
signed main(){
ios::sync_with_stdio(false);
cin>>n;
for(register int i=1;i<=n;i++){
cin>>a[i];
len[i]=a[i].length();
S+=len[i];
q1.insert(i);
q2.insert(i);
}
if(n==1){
s=a[1];goto rrr;
}
cur='0';
while(used<S){
for(set<int>::iterator it=q1.begin();it!=q1.end();it++){
if(b[*it]==len[*it]){
it=q1.erase(it);
}
while(a[*it][b[*it]]==cur&&b[*it]<len[*it]){
s+=cur;lens++;
b[*it]++;
used++;
}
}
if(lens==lenp){
cur=cur=='1'?'0':'1';
}
lenp=lens;
}
qwq=s.length();
for(register int i=0;i<qwq;i++){
if(s[i]==s[i+1])ans1++;
}
memset(b,0,sizeof(b));
cur='1';s="";used=0;lens=0;lenp=0;
while(used<qwq){
for(set<int>::iterator it=q2.begin();it!=q2.end();it++){
if(b[*it]==len[*it]){
it=q2.erase(it);
}
while(a[*it][b[*it]]==cur&&b[*it]<len[*it]){
s+=cur;lens++;
b[*it]++;
used++;
}
}
if(lens==lenp){
cur=cur=='1'?'0':'1';
}
lenp=lens;
}
rrr:
qwq=s.length();
for(int i=0;i<qwq;i++){
if(s[i]==s[i+1])ans2++;
}
cout<<max(ans1,ans2);
}