diff --git a/src/11/5/qzhash.cpp b/src/11/5/qzhash.cpp new file mode 100644 index 0000000..efe52b4 --- /dev/null +++ b/src/11/5/qzhash.cpp @@ -0,0 +1,43 @@ +#include +using namespace std; +typedef long long ll; +int T,n,Z[2001000],cnt1[30],cnt2[30],sum[30],CN,BN,nown,sumn,nown2; +ll res; +char s[2001000]; +int main(){ +// freopen("string.in","r",stdin); +// freopen("string.out","w",stdout); + scanf("%d",&T); + while(T--){ + scanf("%s",s),n=strlen(s),memset(sum,0,sizeof(sum)),memset(cnt1,0,sizeof(cnt1)),memset(cnt2,0,sizeof(cnt2)),res=CN=BN=0; + for(int i=0;iRpos)Centre=i,Rpos=i+Z[i]-1; + } +// for(int i=1;i>1,N2=(tot)>>1; +// printf("%d:%d %d\n",tot,N1,N2); + res+=1ll*sumn*N1; + if(cnt2[s[i-1]-'a'])nown2--; + else nown2++; + cnt2[s[i-1]-'a']^=1; + sum[nown2]++; + if(nown2<=nown)sumn++; + res+=1ll*BN*N2; + if(nown2<=CN)BN++; + } + printf("%lld\n",res); + } + return 0; +}