一开始用set存字符串超时了
后来用hash判重 用set存
懒得写函数了
应该有8重
hash=hash*key+xx;
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--){
string s;
cin>>s;
set<long long>p;
long long hash=1;
int len=s.size();
for(int i=0;i<len;i++)
hash=(hash*29+s[i]-'a'+1);
p.insert(hash);
for(int i=1;i<len;i++){
hash=1;
for(int j=i;j<len;j++)
hash=(hash*29+s[j]-'a'+1);
for(int j=0;j<i;j++)
hash=(hash*29+s[j]-'a'+1);
p.insert(hash); hash=1;
for(int j=i-1;j>=0;j--)
hash=(hash*29+s[j]-'a'+1);
for(int j=i;j<len;j++)
hash=(hash*29+s[j]-'a'+1);
p.insert(hash); hash=1;
for(int j=i;j<len;j++)
hash=(hash*29+s[j]-'a'+1);
for(int j=i-1;j>=0;j--)
hash=(hash*29+s[j]-'a'+1);
p.insert(hash); hash=1;
for(int j=len-1;j>=i;j--)
hash=(hash*29+s[j]-'a'+1);
for(int j=0;j<i;j++)
hash=(hash*29+s[j]-'a'+1);
p.insert(hash); hash=1;
for(int j=0;j<i;j++)
hash=(hash*29+s[j]-'a'+1);
for(int j=len-1;j>=i;j--)
hash=(hash*29+s[j]-'a'+1);
p.insert(hash); hash=1;
for(int j=i-1;j>=0;j--)
hash=(hash*29+s[j]-'a'+1);
for(int j=len-1;j>=i;j--)
hash=(hash*29+s[j]-'a'+1);
p.insert(hash); hash=1;
for(int j=len-1;j>=i;j--)
hash=(hash*29+s[j]-'a'+1);
for(int j=i-1;j>=0;j--)
hash=(hash*29+s[j]-'a'+1);
p.insert(hash); hash=1;
}
printf("%d\n",p.size());
}
}