最近感到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. Hash表算法

    出处:http://blog.csdn.net/v_JULY_v 第一部分:Top K 算法详解问题描述百度面试题:    搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的 ...

  2. vs2013-tfs-疑问之版本控制器路径有双引号解决办法

    问题描述: 最近项目:“****”展示交易平台 ,所以版本控制器路径为: 导致生成解决方案提示:路径有问题 解决办法: 1.直接在版本控制器重命名是不支持的,需要安装:  Visual Studio ...

  3. ShadowGun Demo学习(非技术向)

    主要针对拿来主义,并对一些使用范围广的shader进行研究.虽然是4,5年前的demo,但还是有学习价值的 1.GodRays MADFINGER/Transparent/GodRays 传统的上帝之 ...

  4. Shell基本功能&配置&Oh-My-Zsh

    http://blog.csdn.net/yangcs2009/article/details/45720193

  5. asp.net 微信支付 错误解决方案

    asp.net 微信支付 错误解决方案 在网上看到有人解决方案为: 解决方法 出现这种错误网上查出现有的原因是: 订阅号没有相关的权限 账号没有认证,没有相关的权限 那么这里遇到问题两种都不是.开发账 ...

  6. [转](一)unity4.6Ugui中文教程文档-------概要

    转载请注明出处:http://blog.csdn.net/u010019717更全的内容请看我的游戏蛮牛地址:http://www.unitymanual.com/forum.php?mod=guid ...

  7. 《Effective C#》:区别和认识四个判等函数

    .Net有四个判等函数?不少人看到这个标题,会对此感到怀疑.事实上确是如此,.Net提供了ReferenceEquals.静态Equals,具体类型的Equals以及==操作符这四个判等函数.但是这四 ...

  8. 响应式设计,bootstrap框架的IE兼容问题

    学习bootstrap框架,主要是为了集成好的响应式框架,及其兼容性. 但是按bootstrap中文站的说明文档 制作了一个栅格布局的test.html后,怎么测试都不成功,在ie8下一直看不到媒体查 ...

  9. servlet学习笔记_1

    一.动态页面和静态页面 动态页面&静态页面:如果浏览器在不同时刻不同条件下访问web服务器的某个页面,浏览器所获得的页面内容会发生变化,那么这种页面称之为动态页面.动态页面和静态页面的区别在于 ...

  10. Deep Learning 15:RBM的学习

    RBM是深度学习的核心,所以必须彻底清楚地理解RBM原理.推导及其训练方法 1.读学位论文“基于深度学习的人脸识别研究”: 对RBM.DBN的介绍比较详细,可以作为基础阅读,再去读英文论文. 2.RB ...