BZOJ3620: 似乎在梦中见过的样子(KMP)
Description
Input
Output
Sample Input
aaaaa
1
【样例输入 2】
abcabcabc
2
Sample Output
6
【样例输出 2】
8
解题思路:
首先一上来想到的是:给你一个字符串,怎么快速地判断是不是ABA式的。
可以看出对于字符串匹配的算法(hash/KMP)
hash在这个问题上是远远劣于KMP的:
hash的暴力枚举时间复杂度已经不可承受,而且似乎没有方法优化的样子。
KMP有一个优秀的性质:你可以很快的知道一个字符串前缀后缀重复的情况,而这恰恰就是ABA式的字符串。
简单来说假如说给定起点字符串的起点KMP求next数组的时候判断其小于k的最小前缀,存在则ans++
那么每次暴力枚举字符串起始点进行如上算法,输出答案就好了,注意前缀的next也是合法情况,开数组记录最小值就好了。
时间复杂度O(n2/2),强调/2是有原因的n<=15000
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using std::min;
char ch[];
int nxt[];
int mini[];
int ans;
int n,m,k;
void Kmp(char *a)
{
nxt[]=nxt[]=;
mini[]=0x3f3f3f3f;
int len=strlen(a+);
for(int i=,j=;i<=len;i++)
{
while(j&&a[i]!=a[j+])
j=nxt[j];
if(a[i]==a[j+])
j++;
nxt[i]=j;
if(j<k)
mini[j]=0x3f3f3f3f;
else
mini[j]=min(mini[nxt[j]],j);
if(mini[j]*<i)
ans++;
}
}
int main()
{
scanf("%s",ch+);
scanf("%d",&k);
int lenl=strlen(ch+);
for(int i=;i<lenl;i++)
Kmp(ch+i);
printf("%d\n",ans);
return ;
}
BZOJ3620: 似乎在梦中见过的样子(KMP)的更多相关文章
- bzoj3620似乎在梦中见过的样子
bzoj3620似乎在梦中见过的样子 题意: 给出一个字符串,要求求出形如A+B+A的子串数量,且lenA≥k,lenB≥1.字符串长度≤15000,k≤100,所以字符长度为小写字母. 题解: 第一 ...
- 【BZOJ3620】似乎在梦中见过的样子 KMP
[BZOJ3620]似乎在梦中见过的样子 Description “Madoka,不要相信 QB!”伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Modoka 的一个 ...
- 似乎在梦中见过的样子 (KMP)
# 10047. 「一本通 2.2 练习 3」似乎在梦中见过的样子 [题目描述] 「Madoka,不要相信 QB!」伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Mo ...
- BZOJ3620 似乎在梦中见过的样子(kmp)
不是很懂为什么数据范围要开的这么诡异,想到正解都不敢写.用类似NOI2014动物园的方法,对每个后缀求出类似next的数组即可. #include<iostream> #include&l ...
- 【kmp】bzoj3620: 似乎在梦中见过的样子
考察kmp理解题 Description “Madoka,不要相信 QB!”伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Modoka 的一个噩梦,也同时是上个轮回中 ...
- bzoj3620 似乎在梦中见过的样子
好久没有写过KMP了,今天写个KMP练练手.此题就是枚举左端点暴力,用KMP做到O(n^2) #include<cstdio> #include<cstring> using ...
- BZOJ.3620.似乎在梦中见过的样子(KMP)
题目链接 /* 896kb 6816ms A+B+A是KMP的形式,于是固定左端点,对于每个位置i,若fail[i]所能到的点k中(k=fail[fail[fail[...]]]),有满足len(l~ ...
- BZOJ 3620: 似乎在梦中见过的样子 [KMP 暴力]
和我签订契约,成为魔法少女吧 题意:求所有形似于A+B+A 的子串的数量 , 且len(A)>=k,len(B)>=1 位置不同其他性质相同的子串算不同子串,位置相同但拆分不同的子串算同一 ...
- BZOJ 3620: 似乎在梦中见过的样子
似乎在梦中见过的样子.... 一道水题调了这么久,还半天想不出来怎么 T 的...佩服自己(果然蒟蒻) 这题想想 KMP 但是半天没思路瞟了一眼题解发现暴力枚举起始点,然后 KMP 如图: O( n2 ...
随机推荐
- ALTERA器件中复位电路实现之-异步复位同步化
所谓异步复位同步化,就是我们通常说的异步复位同步撤除. 为了避免纯粹的同步复位和纯粹异步复位的问题,可以使用一种叫做同步化的异步复位,我们称其为第三类复位.这种复位完全结合了异步复位和同步复位的优势, ...
- numpy 数据类型与 Python 原生数据类型
查看 numpy 数据类型和 Python 原生数据类型之间的对应关系: In [51]: dict([(d, type(np.zeros(1,d).tolist()[0])) for d in (n ...
- 2015上海网络赛 HDU 5475 An easy problem 线段树
题意就不说了 思路:线段树,维护区间乘积.2操作就将要除的点更新为1. #include<iostream> #include<cstdio> #include<cstr ...
- Android自定义控件简单实现ratingbar效果
先上图: 一开始让我自定义控件我是拒绝的,因为android很早以前就有一个控件ratingbar,但是设置样式的时候我发现把图片设置小一点就显示不全,一直找不到解办法!(可以设置系统的自带的小样式) ...
- MVC ValidateInput(false)页面验证失效的解决方案
毫无疑问这是一个bug,很多用户升级到rc时都遇到了这个问题,以前很正常的提交只要带有html标签就被报"...从客户端中检测到有潜在危险的 request.form 值."即使在 ...
- Linux常用音乐播放器
1.Rhythmbox是一个音乐播放和管理应用,GNOME桌面环境自带,它可以播放各种音频格式的音乐管理收藏的音乐.同时还具有音乐回放.音乐导入.刻录音频CD.显示专辑封面.显示歌词.DAAP共享等功 ...
- Linux常用PDF阅读软件
1.福昕阅读器是一款PDF文档阅读器,对中文的支持度非常高.福昕阅读器作为全球最流行的PDF阅读器,能够快速打开.浏览.审阅.注释.签署及打印任何PDF文件. 2.evince是一个支持多种格式的文件 ...
- 技嘉H81M-DS2 主板安装 XP方法,及网卡驱动安装
这是微软联合厂家封杀XP的结果,目的很简单,微软只想把你驱赶到WIN7.WIN8上去. 16.7.18 技嘉H81M-S1, G3260 安装XP系统 *BIOS 修改 Storage Boot Op ...
- json和XML
发请求(url) 1.client ---------------->服务端 发送数据(Json/xml) < - ...
- Android照片墙完整版,完美结合 内存方案 LruCache 和 硬盘方案 DiskLruCache
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/34093441 在上一篇文章当中,我们学习了DiskLruCache的概念和基本用法 ...