最近感到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. Sublime Text怎么在切分两行视口内显示同一个文件

    原文链接:http://devlog.en.alt-area.org/?p=1098 How to split one file into two views in Sublime Text2 You ...

  2. RabbitMQ入门教程(转)

    http://blog.csdn.net/column/details/rabbitmq-for-java.html http://blog.csdn.net/anzhsoft/article/det ...

  3. 招聘一个靠谱的 iOS

    近一年内陆续面试了不少人了,从面试者到面试官的转变让我对 iOS 招聘有了更多的感受.经过了前段时间的一大波面试,我们终于找到了志同道合的小伙伴,面试也暂时告一段落了.总结下面试人过程中的感受,你也可 ...

  4. 8 个必备的PHP功能开发

    做过PHP开发的程序员应该清楚,PHP中有很多内置的功能,掌握了它们,可以帮助你在做PHP开发时更加得心应手,本文将分享8个开发必备的PHP功能,个个都非常实用,希望各位PHP开发者能够掌握.    ...

  5. c++ 指针常量,常量指针

    当const遇到指针 一般来说,const修饰指针可以分为下面的集中情况. 描述 例子 含义 备注 const在*的左边 const int *b=&a; int const *b=& ...

  6. 深入浅出设计模式——享元模式(Flyweight Pattern)

    模式动机 面向对象技术可以很好地解决一些灵活性或可扩展性问题,但在很多情况下需要在系统中增加类和对象的个数.当对象数量太多时,将导致运行代价过高,带来性能下降等问题.享元模式正是为解决这一类问题而诞生 ...

  7. 如何让linux定时任务crontab按秒执行

    如何让linux定时任务crontab按秒执行? linux定时任务crontab最小执行时间单位为分钟如果想以秒为单位执行,应该如何设置呢?思路 正常情况是在crontab中直接定义要执行的任务,现 ...

  8. django template

    一.模板基本元素 1.例子程序 1)urls.py中新增部分 from django.conf.urls import patterns, url, include urlpatterns = pat ...

  9. bootstrap笔记-布局

    1.通过文本对齐类,可以简单方便的将文字重新对齐. <p class="text-left">Left aligned text.</p> <p cl ...

  10. (35)odoo中widget

    widget大全: many2many_tagsone2many_listselectionprogressbarselectionstatusbarhandlemonetarymail_thread ...