poj 3007

来源:互联网 发布:java 获取对象的大小 编辑:程序博客网 时间:2024/06/06 07:51

一开始用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());} }