此程序在开启O2情况下RE #26 WA #22 而不开启O2情况下RE #23#24#25#26 WA#22
#include<bits/stdc++.h>
using namespace std;
string st;
int t,f[(1<<20)+10][30],b[(1<<20)+10],zt,n,l,tt;
unsigned long long sm[(1<<20)+10],tp,ans;
int main(){
cin>>t;
while(t--){
cin>>st;
//scanf(" %s",&st);
//cout<<1;
l=st.size();
//cout<<l;
//for(int i=0;i<l;i++)cout<<st[i];
//cout<<endl;
ans=0;
for(int i=0;i<=26;i++)f[0][i]=0;
n=1;
zt=1<<(st[0]-'a');
for(int i=n;i<=26;i++)f[0][i]++;
for(int i=1;i<l;i++){
tt=st[i]-'a';
if(!(zt&(1<<tt))) n++;
else n--;
zt=zt^(1<<tt);
for(int j=0;j<=26;j++)f[i][j]=f[i-1][j];
for(int j=n;j<=26;j++)f[i][j]++;
}
/*
for(int i=0;i<l;i++){
for(int j=0;j<=5;j++){
cout<<f[i][j]<<" ";
}
cout<<endl;
}*/
zt=0;
n=0;
for(int i=l-1;i>=0;i--){
tt=st[i]-'a';
if(!(zt&(1<<tt))) n++;
else n--;
zt=zt^(1<<tt);
b[i]=n;
}
b[l]=-1;
/*
for(int i=0;i<l;i++)cout<<b[i]<<" ";
cout<<endl;*/
sm[0]=st[0]-'a';
for(int i=1;i<l;i++){
sm[i]=sm[i-1]*131+(st[i]-'a');
}
tp=131;
for(int i=2;i<=l-1;i++){
tp*=131;
ans+=f[i-2][b[i]];
tt=1;
while(sm[i-1]==(sm[i*(tt+1)-1]-sm[i*tt-1]*tp)&&tt*i<l){
tt++;
ans+=f[i-2][b[tt*i]];
}
}
cout<<ans<<endl;
}
return 0;
}