最近感到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. plsql和oracle错误记录

    昨天oracle密码搞忘记了,根据网上方法弄了不管用,索性直接删掉数据库,然后重建,再次登陆的时候既然报错, 说我适配器错误,我靠,这是闹哪样,找了好多方法,都解决不了. 然后上班问一个oracle大 ...

  2. Spark 1.1.0 编译(为了支持hbase 0.98.6)

    为了支持hbase0.98.6,需要重新编译spark 1. 下载spark 1.1.0源代码,以及 scala-2.10.4的bin包. 将环境变量 SCALA_HOME 设置为 scala-2.1 ...

  3. Android SQLite数据库使用

    在Android开发中SQLite起着很重要的作用,网上SQLite的教程有很多很多,不过那些教程大多数都讲得不是很全面.本人总结了一些SQLite的常用的方法,借着论坛的大赛,跟大家分享分享的.一. ...

  4. Android跨进程通信的四种方式

    由于android系统中应用程序之间不能共享内存.因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一些.在android SDK中提供了4种用于跨进程通讯的方式.这4种方式正好对应于andro ...

  5. [问题2015S14] 复旦高等代数 II(14级)每周一题(第十五教学周)

    [问题2015S14]  设 \(J=\begin{pmatrix} 0 & I_n \\ -I_n & 0 \\ \end{pmatrix}\), \(A\) 为 \(2n\) 阶实 ...

  6. [问题2014S04] 解答

    [问题2014S04] 解答  由于 \(A\) 可对角化, 可设 \(\alpha_1,\alpha_2,\cdots,\alpha_n\in\mathbb{C}^n\) 是 \(A\) 的 \(n ...

  7. Selenium Web 自动化 - 项目实战(三)

    Selenium Web 自动化 - 项目实战(三) 2016-08-10 目录 1 关键字驱动概述2 框架更改总览3 框架更改详解  3.1 解析新增页面目录  3.2 解析新增测试用例目录  3. ...

  8. 从零开始HTML(一 2016/9/19)

    就是准备跟着W3C上的教程过一遍HTML啦,边看边记录更便于理解记忆吧~ 1.属性 HTML 标签可以拥有属性.属性提供了有关 HTML 元素的更多的信息.属性总是以名称/值对的形式出现,比如:nam ...

  9. 解决 Cannot find OpenSSL's <evp.h>

    yum install openssl openssl-devel ln -s /usr/lib64/libssl.so /usr/lib/

  10. PHP 小方法之 写日志方法

    if(! function_exists ('write_log') ) { function write_log($data, $name='debug', $date=null){ if (is_ ...