1 solutions
-
0
C++ :
#define MAXN 1000010UL #define ll long long #include <cstdio> #include <cstring> int n,next[MAXN],len,num[MAXN]; ll Ans; const ll Mod=(1e9)+7; char inp[MAXN]; void GetNext(){ len=strlen(inp);num[0]=1,num[1]=2; for(int i=1,k=0;i<len;i++){ while(k&&inp[i]!=inp[k]){ k=next[k]; } if(inp[i]==inp[k]){ k++; } next[i+1]=k;num[i+1]=num[k]+1; } return; } void Work(){ scanf("%s",inp); Ans=1; GetNext(); for(int i=1,k=0;i<=len;i++){ int pos=(i+1)>>1; while(k&&inp[k]!=inp[i]){ k=next[k]; } if(inp[k]==inp[i]){ k++; } while(k>pos){ k=next[k]; } Ans*=num[k];Ans%=Mod; } printf("%lld\n",Ans); return; } int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ Work(); } return 0; }
- 1
Information
- ID
- 18485
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By