Kingdom of Black and White
#include<bits/stdc++.h> #define inf 0x3f3f3f3f #define ll long long #define MAX 1000001 const ll N = 1e5+7; const ll mod = 1e9+7; using namespace std; ll q[N]; int main(){ int t;scanf("%d",&t); for(int _=1;_<=t;++_){ memset(q,0,sizeof(q)); string s; int p=0,l=0; cin>>s; int n=s.length(); for(int i=0;i<n;++i){ if(s[i]!=s[i+1]){ q[++p]=i-l+1; l=i+1; } }//原贡献 ll y=0; for(int i=1;i<=p;++i) y=y+q[i]*q[i]; ll ans=y; //改变块的长度不为1 if(p>=2){ ll ans1=0; //改变量 for(int i=1;i<p;++i) ans1=max(ans1,abs(q[i]-q[i+1])); if(2*ans1+2>0) ans=ans+2*ans1+2; } //改变块长度为1 if(p>=3){ ll ans2=0; //改变量 for(int i=2;i<p;++i){ if(q[i]!=1) continue; ll a=q[i-1],b=q[i+1]; ans2=max(ans2,a*b+a+b); } if(ans2>0) ans=max(ans,y+ans2*2); } printf("Case #%d: %lld\n",_,ans); } return 0; }