KMP的next数组,对于next[i],是:1~i-1的最长的匹配的前缀和后缀的长度(也即在i位置匹配失败后,应该跳到的模式串的位置)

然后我们将所有满足要求的字串按照它的末尾位置分类。

 #include <cstdio>
#include <cctype>
#define M 10007
#define maxn 200010 int n;
char aa[maxn];
int f[maxn], dp[maxn]; void gn( int &v ) {
char ch, opt;
while(!isdigit(ch=getchar())) opt=ch;
v=ch-'';
while( isdigit(ch=getchar())) v=v*+ch-'';
if( opt=='-' ) v=-v;
}
void gc( char &ch ) {
while(!isalpha(ch=getchar()));
}
void getfail() {
f[] = f[] = ;
for( int i=,j; i<n; i++ ) {
j = f[i];
while( j && aa[i]!=aa[j] ) j=f[j];
f[i+] = aa[i]==aa[j] ? j+ : ;
}
}
int main() {
int T;
gn(T);
while( T-- ) {
gn(n);
for( int i=; i<n; i++ )
gc(aa[i]);
getfail();
int sum=;
dp[] = dp[] = ;
for( int i=; i<=n; i++ ) {
dp[i] = dp[f[i]]+(f[i]!=);
sum = (sum+dp[i])%M;
}
sum += n;
sum %= M;
printf( "%d\n", sum );
}
}

最新文章

  1. loading动画效果记录
  2. 【iOS】线程安全的文件读写
  3. objective -c こだわり
  4. Swift # 异常处理
  5. copy ,abs,includes 3个函数
  6. windowsxp_电脑桌面显示不出来。
  7. java代码的编译、执行过程
  8. scrapy爬虫框架和selenium的配合使用
  9. Nop--NopCommerce源码架构详解专题目录
  10. 自定制property
  11. 浅析MySQL中concat以及group_concat的使用
  12. Mongodb-- python中使用pymongo连接mongodb数据库
  13. Sequelize-nodejs-6-Instances
  14. UDP socket也可以使用connect系统调用
  15. HBase源代码分析之HRegionServer上MemStore的flush处理流程(一)
  16. HDU 1312 Red and Black (深搜)
  17. Kali Linux使用Aircrack破解wifi密码(wpa/wpa2)
  18. CALayer简介(转)
  19. [bzoj3224]Tyvj 1728 普通平衡树——splay模板
  20. 聊聊、Zookeeper 客户端 Curator

热门文章

  1. VC拷贝字符串到剪切板
  2. C# 操作资源文件
  3. 全文搜索引擎 Elasticsearch 介绍
  4. 绿色的宠物店cms后台管理系统模板——后台
  5. VueJS 集成 medium editor 自定义编辑器按钮
  6. AngularJS 指令绑定 &amp; 简介
  7. vsftpd 安装配置详细教程
  8. python并发编程之asyncio协程(三)
  9. CGI、FastCGI和php-fpm的概念和区别
  10. Linux文档时间戳查看和修改——stat