记录编号 414291 评测结果 AAAAAAAAAA
题目名称 [NOI 2014]动物园 最终得分 100
用户昵称 Gravataryymxw 是否通过 通过
代码语言 C++ 运行时间 0.536 s
提交时间 2017-06-13 21:39:37 内存使用 16.53 MiB
显示代码纯文本
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#define p 1000000007
using namespace std;
long long n,l,shu;
long long fail[1000100],num[1000100];
char a[1000100];
void getfail1()
{
  fail[0]=fail[1]=0;
  num[1]=1;
  for(int i=2,k=0;i<=l;++i)
  {
    while(k&&a[k]!=a[i-1])
      k=fail[k];
    if(a[k]==a[i-1])
      ++k;
    fail[i]=k;
    num[i]=num[fail[i]]+1;
  }
}
void getfail2()
{
  for(int i=2,k=0;i<=l;++i)
  {
    while(k&&a[k]!=a[i-1])
      k=fail[k];
    if(a[k]==a[i-1])
      ++k;
    //fail[i]=k;
    while(k>(i/2))
      k=fail[k];
    shu=shu*(num[k]+1)%p;
  }
}
int main()
{
  freopen("zoo.in","r",stdin);
  freopen("zoo.out","w",stdout);
  scanf("%d",&n);
  for(int i=1;i<=n;++i)
  {
    shu=1;
    memset(fail,0,sizeof(fail));
    memset(num,0,sizeof(num));
    scanf("%s",a);
    l=strlen(a);
    getfail1();
    getfail2();
    printf("%lld\n",shu);
  }
  //system("pause");
  return 0;
}