2 条题解
-
0Onlynagesha LV 9 @ 2016-07-22 01:26:46
#include <cstdio>
const int maxN=1e6+5;
const int mod=1e9+7;char str[maxN];
int next[maxN];
int num[maxN];int solve()
{
next[0]=num[0]=-1;
for(int i=1;str[i];i++)
{
int k=next[i-1];
while(k!=-1 && str[k+1]!=str[i]) k=next[k];
next[i]=(++k);
num[i]=num[k]+1;
}
long long ans(1);
int fix(-1);
for(int i=1;str[i];i++)
{
while(fix!=-1 && str[fix+1]!=str[i]) fix=next[fix];
if(++fix) while((fix<<1) > i) fix=next[fix];
ans=(ans*(num[fix]+2))%mod;
}
return (int)ans;
}int main()
{
int T; scanf("%d",&T);
while(T--)
{
scanf("%s",str+1);
printf("%d\n",solve());
//for(int i=1;str[i];i++) printf("%d %d\n",next[i],num[i]);
}
return 0;
} -
02016-01-10 18:27:24@
虽然我没有AC但我来抢个沙发
- 1
信息
- ID
- 1866
- 难度
- 6
- 分类
- (无)
- 标签
- 递交数
- 236
- 已通过
- 66
- 通过率
- 28%
- 被复制
- 2
- 上传者