题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3670

第一次写KMP算法...又T又WA了半天...

1. num 数组表示包括其本身的前缀后缀相同个数,所以 num[1] = 1 ;

2.指针开两个,不要一个来回移动,不然会惨 T;

num 数组、nxt 数组的定义一定要搞清楚才行呢...

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
int const maxn=;
ll ans,mod=1e9+;
int n,nxt[maxn],num[maxn];
char a[maxn];
int rd()
{
int ret=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-; ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return ret*f;
}
int main()
{
n=rd();
while(n--)
{
// scanf("%s",&a+1);
cin>>a+;
int l=strlen(a+);
memset(nxt,,sizeof nxt);
memset(num,,sizeof num);
ans=; nxt[]=; num[]=;//
int nw=,nw2=;
for(int i=;i<=l;i++)
{
// int nw=nxt[i-1];
while(a[i]!=a[nw+]&&nw)nw=nxt[nw];
// if(nw==-1&&a[1]==a[i])nxt[i]=1;
// else
// nxt[i]=nw+1;
// nw=nxt[i];
if(a[i]==a[nw+])nw++;
nxt[i]=nw;
num[i]=num[nw]+;
// printf("num[%d]=%d\n",i,num[i]);
// printf("nxt[%d]=%d\n",i,nxt[i]);
while(a[i]!=a[nw2+]&&nw2)nw2=nxt[nw2];
if(a[i]==a[nw2+])nw2++;
while(nw2*>i)
{
// if(nw*2<=i)
// {
// num[i]=num[nw]+1;break;
// }
// cout<<nw<<endl;
nw2=nxt[nw2];
}
// printf("i:%d num=%d\n",i,num[i]);
(ans*=(num[nw2]+))%=mod;
}
printf("%lld\n",ans);
}
return ;
}

bzoj3670 [Noi2014]动物园——KMP的更多相关文章

  1. BZOJ3670:[NOI2014]动物园(KMP)

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

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

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

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

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

  4. [BZOJ3670] [NOI2014] 动物园 解题报告 (KMP)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3670 Description 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅, ...

  5. BZOJ3670 [Noi2014]动物园

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

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

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

  7. [NOI2014]动物园(kmp)

    题目 https://www.luogu.org/problemnew/show/P2375 做法 查找多少个前缀与后缀配对,其实就是\(fail\)树的深度 而不可重叠,其实\(i\)不可用的,\( ...

  8. BZOJ 3670 NOI2014 动物园 KMP+dp

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

  9. P2375 [NOI2014]动物园 KMP

    好,暴力能拿$50pts\space qwq$ 暴力的思路就是一直跳$nxt[j]$,直到它的长度小于串的一半,然后开始计数,当然要接着跳$nxt[j]$ 正解:考虑没有长度要求的(不要求不重合)公共 ...

随机推荐

  1. 将scl分频

    多个scl后一个高脉冲,脉冲宽度一个scl脉冲. always @ ( posedge MCLK or negedge RST_N ) begin if (rClkCount == 24) //如果有 ...

  2. typeof instanceof操作符的相关知识

    数据类型 ECMAScript中有5中基本数据类型:Undefined Null Boolean Number String. Typeof运算符 对一个值使用typeof操作符可能返回下列某个字符串 ...

  3. STM32F407 按键输入实验 库函数版 个人笔记

    读取IO口输入的函数: STM32F4 的 IO口做输入使用的时候,是通过调用函数 GPIO_ReadInputDataBit()来读取 IO 口的状态的.了解了这点,就可以开始我们的代码编写了. 按 ...

  4. Android 笔记一:线性布局

    建立布局 新建项目后,在如图路径下新建xml文件可以开始编辑 weight的使用 android:layout_width="0dp",或android:layout_width= ...

  5. MTK平台 GPU 相关知识

    一.什么是Render script,以及mtk平台GPU support情况 [DESCRIPTION] 1.什么是RenderScript ? 2.RenderScript 干什么? 3.MTK平 ...

  6. Codeforces Round #343 (Div. 2)【A,B水题】

    A. Far Relative's Birthday Cake 题意: 求在同一行.同一列的巧克力对数. 分析: 水题~样例搞明白再下笔! 代码: #include<iostream> u ...

  7. windows-nginx安装与运行静态资源

    windows-nginx 官网 http://nginx.org/en/docs/windows.html 点击跳转 安装包下载 http://nginx.org/en/download.html ...

  8. CentOS 7防火墙服务FirewallD指南

    CentOS 7防火墙服务FirewallD指南 作者:chszs,未经博主同意不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 防火墙是一种位于内部网 ...

  9. TP-Link的Atheros芯片的WR886n v5 安装SuperWRT系统

    安装SuperWRT系统 本教程以TP-Link的Atheros芯片的WR886n v5为例,教新手如何刷入一个已支持设备的固件. 下载设备固件请访问:这里 (没有支持你的设备?自由动手一下:hack ...

  10. struts2学习笔记(二)—— 获取登录信息及计算在线人数

    实现目的:       1.点击"Login"的超链接.进入登录页面       2.填写登录信息.提交表单,将用户信息保存进Session       3.显示用户名,并计算在线 ...