正题

评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P2375


题目大意

对于kmp操作,我们多求一个numnumnum数组,表示对于字符串SSS的前i" role="presentation">iii个字符构成的子串,既是它的后缀同时又是它的前缀,并且该后缀与该前缀不重叠。


解题思路

我们可以在求next的时候进行递推,然后就可以求出可以重合的num。
然后我们在用next去掉不可以的答案。
但是如果这样我们就会超时,所以我们发现如果不重合,那么长度最大为n÷2n÷2n\div 2,所以我们直接不更新jjj,因为这个位置满足长度为i" role="presentation">iii,那么也一定满足长度为i+1i+1i+1的情况。


code

#include<cstdio>
#include<cstring>
#define mod 1000000007
using namespace std;
char s[1000011];
int l,p[1000011],ans[1000001],tot,t;
void ycl()//求next数组
{ans[0]=0;ans[1]=1;for (int i=1,j=0;i<l;i++){while (j&&s[i]!=s[j]) j=p[j];if (s[i]==s[j]) j++;ans[i+1]=ans[j]+1;//递推p[i+1]=j;}
}
long long answer()
{long long sum=1;for (int i=1,j=0;i<l;i++){while (j&&s[i]!=s[j]) j=p[j];if (s[i]==s[j]) j++;while((j<<1)>(i+1)) j=p[j];//计算j位置sum=(sum*(long long)(ans[j]+1))%mod;}return sum;
}
int main()
{scanf("%d",&t);for(int i=1;i<=t;i++){memset(p,0,sizeof(p));scanf("%s",s);l=strlen(s);ycl();printf("%lld\n",answer());}
}

P2375-[NOI2014]动物园【KMP,字符串】相关推荐

  1. P2375 [NOI2014] 动物园 kmp fail指针/倍增

    传送门 文章目录 题意: 思路: 题意: 思路: 由kmpkmpkmp中失配数组nenene的含义我们知道,ne[i],ne[ne[i]],...ne[i],ne[ne[i]],...ne[i],ne ...

  2. 洛谷P2375 [NOI2014] 动物园 题解

    洛谷P2375 [NOI2014] 动物园 题解 题目链接:P2375 [NOI2014] 动物园 题意: 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物 ...

  3. bzoj 3670: [Noi2014]动物园 kmp与扩展kmp

    bzoj 3670: [Noi2014]动物园容 Description 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才 ...

  4. BZOJ3670 [Noi2014]动物园 【KMP计数】

    3670: [Noi2014]动物园 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 3143  Solved: 1690 [Submit][Stat ...

  5. bzoj 3670 [NOI2014]动物园

    3670: [Noi2014]动物园 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 2032  Solved: 1077 [Submit][Stat ...

  6. bzoj3670 [Noi2014]动物园

    [Noi2014]动物园 Time Limit: 10 Sec Memory Limit: 512 MB Description 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游 ...

  7. bzoj-3670 [Noi2014]动物园

    3670: [Noi2014]动物园 题目链接 时间限制: 10 Sec 内存限制: 512 MB 提交: 3558 解决: 1925 [提交][][] 题目描述 近日,园长发现动物园中好吃懒做的动物 ...

  8. [BZOJ]3670 [NOI]2014 动物园 KMP好题

    3670: [Noi2014]动物园 Time Limit: 10 Sec   Memory Limit: 512 MB Submit: 3045   Solved: 1646 [ Submit][ ...

  9. KMP字符串模式匹配详解

    KMP字符串模式匹配详解 KMP字符串模式匹配通俗点说就是一种在一个字符串中定位另一个串的高效算法.简单匹配算法的时间复杂度为O(m*n);KMP匹配算法.可以证明它的时间复杂度为O(m+n).. 一 ...

  10. kmp字符串查询算法

    kmp字符串查询算法 1 普通的字符串查询 普通的字符串查询是遍历被查找的字符串,然后和key字符串进行匹配,如果不一致,则,被查找的字符串+1,继续向下遍历. 代码如下: private stati ...

最新文章

  1. springboot配置Redis哨兵主从服务 以及 Redis 集群
  2. python编写程序的一般步骤-Python:开发_基本流程
  3. android eclipse关联源码,以及源码(代码)以及jar查看软件
  4. WinForm窗体中如何在一个窗体中取到另一个窗体的值
  5. 什么情况下不应该使用深度学习?
  6. python文件夹,文件监听工具(pyinotify,watchdog)
  7. np.random.choice的用法
  8. c语言有理数均值思路,5-35 有理数均值 (20分)
  9. Swift - 图片去色 图片灰色显示
  10. python中match方法_Python3.9.1中如何使用match方法?
  11. 盘搜和网盘资源搜索神器——又落后了
  12. 读《Python编程:从入门到实践》
  13. Windows2008环境64位操作系统如何安装32位BDE
  14. ASP.NET企业HR人力资源管理系统源码(带使用手册和操作说明)
  15. 使用frp搭建自己的内网穿透
  16. PIR独立需求计划创建修改_SAP刘梦_新浪博客
  17. 河南省第十四届ICPC大学生程序设计竞赛
  18. 圆台下料展开计算方法_小锥角大圆台的准确下料法
  19. 免费在官网获得一个云MongoDB数据库
  20. 多巴胺ELISA试剂盒相关功能参数

热门文章

  1. linux备份文件到ftp上,Linux服务器下用FTP上传下载备份文件
  2. 河南大学计算机组成原理,河南大学计算机组成原理考点
  3. facade java_Java设计模式之Facade模式
  4. android 文件 c语言 jni,Android jni 调用的so文件一个函数的反汇编 高手来看看
  5. 后端学习 - JDBC
  6. [数据结构-严蔚敏版]P48栈的链式表示
  7. 给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构(算法导论第十章10.4-3)
  8. TCP三次握手建立连接
  9. HDU 6340 Problem I. Delightful Formulas(伯努利数 + 积性函数反演)
  10. H - Great Cells Gym - 101194H(数学推导/思维)