枚举每个子串,算它变成“相邻都不同”最少要改几位,然后全部加起来。
void solve(){
string s;cin>>s;
int n=s.size();
vi pre(n+1,0);
for(int i=0;i<n;++i){
int x=(s[i]-'0')^(i&1);
pre[i+1]=pre[i]+x;
}
ll ans=0;
for(int i=0;i<n;++i){
for(int j=i;j<n;++j){
int len=j-i+1;
int c1=pre[j+1]-pre[i];
int c=(i&1)?(len-c1):c1;
ans+=min(c,len-c);
}
}
cout<<ans<<endl;
}

京公网安备 11010502036488号