题目链接

题意:给n个字符串,求出每个字符串的num值,加1后相乘。num[i]表示1~i中,有多少没有重叠的公共前缀后缀。

分析:

kmp中p数组表示最大的公共前缀后缀。设一cnt数组,表示1~i中有多少公共前缀后缀(包括重叠的),那么cnt[1]=1,(自己是自己的公共前后缀)。

那么:cnt[i]=cnt[p[i]]+1:因为1~p[i]与i-p[i]+1~i是相等的,所以1~p[i]的公共前后缀一定被包含在1~i中,且字符串1~i也是自己的公共前后缀,所以再+1

预处理出cnt数组后,那么对于1~i找到他的最大的且长度不超过i/2的公共前后缀,就是答案。

code

 #include<cstdio>
#include<cstring> const int N = ;
const int mod = 1e9+; char w[N];
int n,C,p[N],cnt[N]; void work() {
int k,ans;
p[] = ;
cnt[] = ;
for (int i=; i<=n; ++i) {
k = p[i-];
while (k && w[i]!=w[k+]) k = p[k];
if (w[i] == w[k+]) k++;
p[i] = k;
cnt[i] = cnt[k] + ;
}
k = ,ans = ;
for (int i=; i<=n; ++i) {
while (k && w[i]!=w[k+]) k = p[k];//这次求的k满足<i/2
if (w[i]==w[k+]) k++;
//k = p[i]; //直接赋值超时,第一次求的k可能是远大于i/2的
while (k > (i/)) k = p[k]; // 这次的k为下次使用,不会远大于i/2
ans = (1ll * ans * (cnt[k]+)) % mod; // num[i] = cnt[k] + 1
}
printf("%d\n",ans);
}
int main () {
scanf("%d",&C);
while (C--) {
scanf("%s",w+);
n = strlen(w+);
work();
}
return ;
}

3670: [Noi2014]动物园的更多相关文章

  1. 字符串(KMP):BZOJ 3670 [Noi2014]动物园

    3670: [Noi2014]动物园 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1521  Solved: 813[Submit][Status] ...

  2. BZOJ 3670: [Noi2014]动物园【KMP变形 】

    3670: [Noi2014]动物园 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 2738  Solved: 1475[Submit][Status ...

  3. 【BZOJ】3670: [Noi2014]动物园

    http://www.lydsy.com/JudgeOnline/problem.php?id=3670 题意:太水了= = #include <bits/stdc++.h> using ...

  4. bzoj 3670: [Noi2014]动物园

    Description 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习 ...

  5. BZOJ 3670 NOI2014 动物园 KMP+dp

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3670 题意概述:令num[i]表示字符串由1~i的字符形成的前缀中不相重叠的相同前后缀的数 ...

  6. BZOJ 3670: [Noi2014]动物园 [KMP]

    求这玩意: 对于字符串S的前i个字符构成的子串,既是它的后缀同时又是它的前缀,并且该后缀与该前缀不重叠,将这种字符串的数量记作num[i] 对1,000,000,007取模的结果 n≤5,L≤1,00 ...

  7. 【BZOJ】3670: [Noi2014]动物园(KMP)

    题目 传送门:QWQ 分析 像求next一样求num. 第二次求next时加上不超过一半的条件. 时间复杂度: $ \huge O ( n ) $ 代码 // luogu-judger-enable- ...

  8. NOI2014 动物园

    3670: [Noi2014]动物园 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 174  Solved: 92[Submit][Status] D ...

  9. bzoj千题计划250:bzoj3670: [Noi2014]动物园

    http://www.lydsy.com/JudgeOnline/problem.php?id=3670 法一:KMP+st表 抽离nxt数组,构成一棵树 若nxt[i]=j,则i作为j的子节点 那么 ...

随机推荐

  1. express不是内部命令

    有时用npm install express -g安装完express时,在写express -v会显示express不是内部命令 这样的话如果自己的安装没有问题的话就要考虑到环境变量了 win7 P ...

  2. IOS item属性总结

    一.UINavigationItem1> 获得方式self.navigationItem // self是指控制器 2> 作用可以用来设置当前控制器顶部导航栏的内容// 设置导航栏中间的内 ...

  3. 创建一个gradle项目

    1.创建项目 一定要选这个安装的路径 项目创建成功,修改build.gradle文件,主要是为了下载依赖的jar包,原始模板, 而我修改之后,如下 apply plugin: 'idea' apply ...

  4. HDU(3560)成环,并查集

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3560 并查集查有几个块,修改了之前我的一个方法(用什么map),直接判断根节点的id是i的个数. 然后 ...

  5. PHP防止SQL注入文件,引入即可

    公司之前做的一个学校网站被黑客攻击并将漏洞公布于网络,其实黑客用的仅仅是一个叫WebCruiserEnt的软件就搞定了,数据库一目了然的呈现在了游客面前,用的就是常用的sql漏洞攻击,这里准备了一个文 ...

  6. 【洛谷P1323】删数问题

    删数问题 题目链接 首先找出最小的k个数:用堆每次取出最小的元素p,将p*2+1和p*4+5压入堆. 贪心求最大数:从前往后找第一个data[j+1]>data[j],删除data[j].(链表 ...

  7. webapi中配置返回的时间数据格式

    web api返回的是标准格式UTC时间,如果要转成我们需要的格式,可以在WebApiConfig.cs的Register函数中新增以下配置来定义返回的时间类型格式: //配置返回的时间类型数据格式 ...

  8. 【书籍连载】《STM32 HAL 库开发实战指南—基于F7》-第一章

    从今天起,每天开始连载一章<STM32 HAL 库开发实战指南—基于F7>.欢迎各位阅读.点评.学习. 第1章  如何使用本书 1.1  本书的参考资料 本书参考资料为:<STM32 ...

  9. C#使用ref和out传递数组

    C#使用ref和out传递数组 一.使用ref参数传递数组 数组类型的ref参数必须由调用方明确赋值.因此,接受方不需要明确赋值.接受方数组类型的ref参数能够修改调用方数组类型的结果.可以将接受方的 ...

  10. C#中 property 与 attribute的区别?

    C#中 property 与 attribute的区别?答:attribute:自定义属性的基类;property :类中的属性