BZOJ 3670 && BZOJ 3620 && BZOJ 3942 KMP
最近感到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的更多相关文章
- bzoj 3670 动物园 - kmp - 动态规划
Description 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习 ...
- 字符串(KMP):BZOJ 3670 [Noi2014]动物园
3670: [Noi2014]动物园 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1521 Solved: 813[Submit][Status] ...
- BZOJ 3670: [Noi2014]动物园【KMP变形 】
3670: [Noi2014]动物园 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 2738 Solved: 1475[Submit][Status ...
- BZOJ 3670 NOI2014 动物园 KMP+dp
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3670 题意概述:令num[i]表示字符串由1~i的字符形成的前缀中不相重叠的相同前后缀的数 ...
- BZOJ 3670: [Noi2014]动物园 [KMP]
求这玩意: 对于字符串S的前i个字符构成的子串,既是它的后缀同时又是它的前缀,并且该后缀与该前缀不重叠,将这种字符串的数量记作num[i] 对1,000,000,007取模的结果 n≤5,L≤1,00 ...
- BZOJ 2085 luogu P3502 [POI2010]Hamsters (KMP、Floyd、倍增)
数组开小毁一生-- 题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2085 这题在洛谷上有个条件是"互不包含",其实 ...
- 【BZOj 3670】【UOJ #5】【NOI 2014】动物园
http://www.lydsy.com/JudgeOnline/problem.php?id=3670 http://uoj.ac/problem/5 可以建出"KMP自动机"然 ...
- bzoj 3670: [Noi2014]动物园
Description 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习 ...
- BZOJ 1009: [HNOI2008]GT考试(kmp+dp+矩阵优化)
http://www.lydsy.com/JudgeOnline/problem.php?id=1009 题意: 思路:真的是好题啊! 对于这种题目,很有可能就是dp,$f[i][j]$表示分析到第 ...
随机推荐
- Testng使用方法示例
TestNG TestNG是一个测试框架,灵感来自JUnit和NUnit.但引入了下面这些新的功能,使它更强大和更容易使用. 注解: 可在任意大的线程池运行您的测试(所有方法在它们自己的线程内,一个线 ...
- Android监听应用程序安装和卸载
Android监听应用程序安装和卸载 第一. 新建监听类:BootReceiver继承BroadcastReceiver package com.rongfzh.yc; import android. ...
- jQuery 效果 —— 隐藏和显示
jQuery 效果 -- 隐藏和显示 1.隐藏和显示 (1)在jQuery中我们可以使用hide()和show()分别隐藏和显示HTML元素: //隐藏元素 $("button") ...
- Python3基础 sort 将一个列表中的值升序排列
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- EVA资料
[史上最全EVA资料+原画+画集+设定集][共2266P=3.56GB] <ignore_js_op> <ignore_js_op> <ignore_js_op> ...
- ubuntu14.04纯命令行下连接有线网和无线网
在ubuntu下网络管理器Network Manager莫名奇妙出现无法连接无线网的情况,于是昨天就开始着手解决这一问题: 一 :卸载 1.第一步卸载Network-Manager (具体字母的大小写 ...
- requestAnimationFrame 动画
requestAnimationFrame : 调用这个方法,就是告诉浏览器要执行动画了,从而浏览器自动计算动画时间间隔,从而在恰当的时候刷新UI, 动画更加平滑. 他的用法和setTimeout() ...
- 使用 Jasmine 进行测试驱动的 JavaScript 开发
Jasmine 为 JavaScript 提供了 TDD (测试驱动开发)的框架,对于前端软件开发提供了良好的质量保证,这里对 Jasmine 的配置和使用做一个说明. 目前,Jasmine 的最新版 ...
- git: windows git ssh keys生成
http://blog.csdn.net/lsyz0021/article/details/52064829 当我们使用github或者bitbucket等仓库时我们有可能需要ssh认证,所以需要生成 ...
- MYSQL常见错误及其解决方式
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...