博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3670: [Noi2014]动物园
阅读量:4582 次
发布时间:2019-06-09

本文共 1028 字,大约阅读时间需要 3 分钟。

t<=5次询问每次问一个<=1e6的串的$\sum_{i=1}^{n} (num_i+1)$,其中num[i]表示既是前缀i的前缀又是前缀i的后缀且这两部分不重叠的子串的数量。

方法一:在KMP树上倍增!吃枣药丸+tle+制杖

方法二:开另一个数组记下每个点在KMP树中的深度,另外开一个指针记下“前后不重叠”的匹配不就完了。。

1 #include
2 #include
3 #include
4 //#include
5 #include
6 //#include
7 using namespace std; 8 9 int t,n;10 #define maxn 100001111 char s[maxn];int fail[maxn],cnt[maxn];12 const int mod=1e9+7;13 int main()14 {15 scanf("%d",&t);16 while (t--)17 {18 scanf("%s",s+1); n=strlen(s+1);19 int f1=0,f2=0; fail[1]=0; cnt[0]=-1; cnt[1]=0;20 int ans=1;21 for (int i=2;i<=n;i++)22 {23 while (f1 && s[i]!=s[f1+1]) f1=fail[f1];24 if (s[i]==s[f1+1]) f1++;25 fail[i]=f1; cnt[i]=cnt[f1]+1;26 27 while (f2 && s[i]!=s[f2+1]) f2=fail[f2];28 if (s[i]==s[f2+1]) f2++;29 while (f2 && f2*2>i) f2=fail[f2];30 ans=1ll*ans*(cnt[f2]+2)%mod;31 }32 printf("%d\n",ans);33 }34 return 0;35 }
View Code

 

转载于:https://www.cnblogs.com/Blue233333/p/8241126.html

你可能感兴趣的文章
HTML页面之间的参数传递
查看>>
java面试题集锦
查看>>
scikit-learn:4.2.3. Text feature extraction
查看>>
Spring Security构建Rest服务-0800-Spring Security图片验证码
查看>>
AE待整理
查看>>
java8中规范的四大函数式接口
查看>>
宝塔apache配置
查看>>
shell脚本中使用nohup执行命令不生效
查看>>
PHP 文件上传七牛云
查看>>
gitlab 邮件服务器配置
查看>>
OFO和摩拜共享单车
查看>>
数据适配 DataAdapter对象
查看>>
有序列表ol和定义列表dl,dt,dd
查看>>
联想小新Air 15 安装黑苹果macOS High Sierra 10.13.6过程
查看>>
公共POI导出Excel方法–java
查看>>
次短路——Dijkstra
查看>>
二分图
查看>>
hdu 1853 Cyclic Tour(费用流OR二分图最佳匹配,5级)
查看>>
js 对url进行某个参数的删除,并返回url
查看>>
Windows7装Linux虚拟机
查看>>