[bzoj3670] [NOI2014] [lg2375] 动物园
2024-09-27 04:31:14
nxt数组为KMP的next数组
num[i]储存了i前面可以匹配的串的个数。
先在KMP求nxt中顺便求出num
最后再找到对于i的最大的前后缀不重叠的可匹配的j,ans*=(num[j]+1)%1000000007
ans即为答案
#include<cstdio>
#include<cstring>
using namespace std;
char s[];
int nxt[],num[],n;
long long ans;
void doit(char *s){
int n=strlen(s);
nxt[]=-;
nxt[]=;
num[]=;
num[]=;ans=;
for(int i=,j=;i<n;i++){
while(j>=&&s[i]!=s[j])j=nxt[j];
nxt[i+]=++j;
num[i+]=num[j]+;
}
for(int i=,j=;i<n;i++){
while(j>=&&s[i]!=s[j])j=nxt[j];
j++;
while((j<<)>(i+))j=nxt[j];
ans=(ans*((long long)num[j]+))%;
}
printf("%lld\n",ans);
}
int main(){
scanf("%d",&n);
while(n--){
scanf("%s",s);
doit(s);
}
}
最新文章
- Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端
- 什么是侧翼区(flanking region)和侧翼区单核苷酸多态性(Flanking SNPs)
- Linux_DHCP服务搭建
- Velocity(1)——注释
- 160906、Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- Add Two Numbers ---- LeetCode 002
- CLOUDSTACK接管VCENTER,意外频出,但最终搞定
- C语言--对数组地址的解析
- QT 初试 MainWindow简易窗体
- 快速玩转Apple Pay开发
- [补充资料] 手动搭建 Cloudera 集群
- Java面试题之对static的理解
- certificate &; encryption
- 解决IntelliJ IDEA 创建Maven项目速度慢问题
- 在windows上传一个新的项目到GitHub上
- mybatis-generator插件执行报错:Cannot resolve classpath entry
- topcoder srm 475 div1
- JavaBasic_09
- window.frames &;&; iframe 跨页面通信
- KETTLE并行