#include<bits/stdc++.h>
using namespace std;
int zt1,zt2,num2[200010],k[100][200010],nest[200010],T,ton1[1000],ton2[1000];
long long ans;
string s;
int main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin>>T;
while (T--){
cin>>s;
ans=0;
zt1=0; zt2=0;
//这里开始
for (int i=1;i<=s.size();i++){
num2[i]=nest[i]=0;
for (int j=0;j<=28;j++) k[j][i]=0;
}
for (int j=0;j<=28;j++) ton1[j]=ton2[j]=0;
for (int i=s.size();i>=1;i--) {
ton1[s[i-1]-'a'+1]++;
if (ton1[s[i-1]-'a'+1]&1) zt1++;
else zt1--;
num2[i]=zt1;
}
for (int i=1;i<=s.size();i++) {
ton2[s[i-1]-'a'+1]++;
if (ton2[s[i-1]-'a'+1]&1) zt2++;
else zt2--;
k[zt2][i]++;
}
//这里结束
for (int j=0;j<=27;j++)
for (int i=1;i<=s.size();i++)
k[j][i]+=k[j][i-1];
for (int i=1;i<=s.size();i++)
for (int j=1;j<=27;j++)
k[j][i]+=k[j-1][i];
for (int i=2;i<=s.size();i++){
int p=i-1;
while (nest[p]<s.size()&&p>0&&s[i-1]!=s[nest[p]]) p=nest[p];
if (p>0) nest[i]=nest[p]+1;
}
for (int i=1;i<s.size();i++){
ans+=k[num2[i+1]][i-1];
for (int j=i+i;j<s.size();j+=i){
if (j-nest[j]&&i%(j-nest[j])==0)
ans+=k[num2[j+1]][i-1];
}
}
cout<<ans<<'\n';
}
return 0;
}
被折磨坏了,代码都改抽象了。