最近感到KMP不会啊,以前都是背板的现在要理解了。

 #include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int Maxn=; char S[Maxn];
int k,P[Maxn],Ans; inline void Kmp(char * Str)
{
int j=;
for (int i=;Str[i];i++)
{
while (Str[j+]!=Str[i] && j) j=P[j];
if (Str[j+]==Str[i]) j++;
P[i]=j;
}
j=;
for (int i=;Str[i];i++)
{
while (Str[j+]!=Str[i] && j) j=P[j];
if (Str[j+]==Str[i]) j++;
while (j<<>=i) j=P[j];
if (j>=k) Ans++;
}
}
int main()
{
scanf("%s",S+);
scanf("%d",&k); Ans=;
for (int i=;S[i+];i++) Kmp(S+i);
printf("%d\n",Ans);
return ;
}

BZOJ 3620

其实这就是KMP的P数组的含义,即S[1~P[i]]==S[i-P[i]+1~i],但是题目中要求的的书不能重复,这样就要暴力找一下P[P[i]]就可以完成了。N^2暴力就可以过

 #include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define LL long long
using namespace std;
const LL Maxn=;
const LL Mod=;
char S[Maxn];
LL k,P[Maxn],Ans,Cnt[Maxn],Kase; inline void Kmp(char * Str)
{
LL j=;
Cnt[]=;
for (LL i=;Str[i];i++)
{
while (Str[j+]!=Str[i] && j) j=P[j];
if (Str[j+]==Str[i]) j++;
P[i]=j;
Cnt[i]=Cnt[j]+;
} j=; LL Ret;
for (LL i=;Str[i];i++)
{
while (Str[j+]!=Str[i] && j) j=P[j];
if (Str[j+]==Str[i]) j++;
while (j<<>i) j=P[j];
Ans=(Ans*(Cnt[j]+))%Mod;
}
}
int main()
{
scanf("%lld",&Kase);
for (LL kase=;kase<=Kase;kase++)
{
scanf("%s",S+);
Ans=; Kmp(S);
printf("%lld\n",Ans);
}
return ;
}

BZOJ 3670

其实和上一道是一样的。

 #include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std; const int Maxn=;
char S[Maxn],T[Maxn],Stack[Maxn];
int Lens,Lent,P[Maxn],top,a[Maxn];
int main()
{
scanf("%s",S+);
scanf("%s",T+);
Lens=strlen(S+),Lent=strlen(T+);
int j=;
for (int i=;i<=Lent;i++)
{
while (T[j+]!=T[i] && j) j=P[j];
if (T[j+]==T[i]) j++;
P[i]=j;
}
j=;
for (int i=;i<=Lens;i++)
{
j=a[top]; Stack[++top]=S[i];
while (T[j+]!=Stack[top] && j) j=P[j];
if (T[j+]==Stack[top]) j++;
a[top]=j;
if (j==Lent) top-=Lent;
}
for (int i=;i<=top;i++) putchar(Stack[i]);
putchar('\n');
return ;
}

BZOJ 3942

裸的KMP..

BZOJ 3670 && BZOJ 3620 && BZOJ 3942 KMP的更多相关文章

  1. bzoj 3670 动物园 - kmp - 动态规划

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

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

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

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

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

  4. BZOJ 3670 NOI2014 动物园 KMP+dp

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

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

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

  6. BZOJ 2085 luogu P3502 [POI2010]Hamsters (KMP、Floyd、倍增)

    数组开小毁一生-- 题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2085 这题在洛谷上有个条件是"互不包含",其实 ...

  7. 【BZOj 3670】【UOJ #5】【NOI 2014】动物园

    http://www.lydsy.com/JudgeOnline/problem.php?id=3670 http://uoj.ac/problem/5 可以建出"KMP自动机"然 ...

  8. bzoj 3670: [Noi2014]动物园

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

  9. BZOJ 1009: [HNOI2008]GT考试(kmp+dp+矩阵优化)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1009 题意: 思路:真的是好题啊! 对于这种题目,很有可能就是dp,$f[i][j]$表示分析到第 ...

随机推荐

  1. ABP文档 - Mvc 控制器

    文档目录 本节内容: 简介 AbpController基类 本地化 其它 过滤 异常处理和结果包装 审计日志 验证 授权 工作单元 反伪造 模型绑定器 简介 ABP通过nuget包Abp.Web.Mv ...

  2. 一步步学习javascript基础篇(7):BOM和DOM

    一.什么是BOM.什么是DOM BOM即浏览器对象模型,主要用了访问一些和网页无关的浏览器功能.如:window.location.navigator.screen.history等对象. DOM即文 ...

  3. 【网络基础编程】第三节 C/S

    学习地址: C语言中文网 - 实现迭代服务端和客户端 GNU - Closing a Socket 前面介绍的程序,不管Service 端还是 Client端,都有一个问题,就是处理完一个 accep ...

  4. ROW_NUMBER()函数的使用

    SQL Server数据库ROW_NUMBER()函数的使用是本文我们要介绍的内容,接下来我们就通过几个实例来一一介绍ROW_NUMBER()函数的使用. 实例如下: .使用row_number()函 ...

  5. ruby初步学习中遇到的错误

    print <<off This is the second way of creating here document ie. multiple line string; off 报错: ...

  6. ssm框架搭建和整合流程

    Spring + SpringMVC + Mybatis整合流程 1      需求 1.1     客户列表查询 1.2     根据客户姓名模糊查询 2      整合思路 第一步:整合dao层 ...

  7. ASP.NET C# 实现钉钉签名算法

    在 https://open-doc.dingtalk.com/microapp/faquestions/hxs5v9 钉钉给出了JAVA/PHP算法,下面是C#算法 using System.Sec ...

  8. 线程中的同步辅助类Semaphore

    同步辅助类  线程池  并发集合类 都是在线程同步的基础上增加了一些同步的东西,在线程同步的基础上更好的实现线程同步.实现的效率更高,更方便而已. 多线程并不是很难 需要你把代码写出来...然后分析运 ...

  9. Struts 2 访问Servlet API的方式

    与Servlet API解耦的访问方式 与Servlet API耦合的访问方式 (tips:耦合既依赖) 1.    与Servlet API解耦的访问方式 2.     与Servlet API耦合 ...

  10. beta冲刺(6/7)

    目录 组员情况 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:恺琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示组内最新成果 团队签入记 ...