好久没有写过KMP了,今天写个KMP练练手。
此题就是枚举左端点暴力,用KMP做到O(n^2)

 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std ;
 4
 5 const int MAXL = 15000 + 20 ;
 6
 7 char BUF_OF_T [ MAXL ] ;
 8 int BUF_OF_F [ MAXL ] ;
 9
10 class KMP {
11     private :
12         char * T ;
13         int * F ;
14     public :
15         KMP ( char * S ) {
16             const int L = strlen ( S ) ;
17             T = BUF_OF_T ; F = BUF_OF_F ;
18             strcpy ( T , S ) ; F [ 0 ] = -1 ;
19             for ( int i = 1 ; i <= L ; ++ i ) {
20                 int p = F [ i - 1 ] ;
21                 while ( p >= 0 && T [ i ] != T [ p + 1 ] ) p = F [ p ] ;
22                 F [ i ] = T [ i ] == T [ p + 1 ] ? p + 1 : -1 ;
23             }
24         }
25         int * GET_FAIL () const { return F ; }
26 } ;
27
28 char S [ MAXL ] ;
29 int K ;
30 int cnt ;
31 int main () {
32     scanf ( "%s%d" , S , & K ) ;
33     for ( int i = 0 ; S [ i ] != '\0' ; ++ i ) {
34         char * a = S + i ;
35         KMP D ( a ) ;
36         int * next = D . GET_FAIL () ;
37         const int L = strlen ( a ) ;
38         for ( int j = 1 ; j <= L ; ++ j ) { //重点:是1 <= j <= L 不是 1 <= j < L
39             int & p = next [ j ] ;
40             while ( p != -1 && next [ p ] + 1 >= K ) p = next [ p ] ;
41             if ( p + 1 >= K && j + 1 - ( p + 1 ) * 2 > 0 ) cnt ++ ;
42         }
43     }
44     printf (  "%d\n" , cnt ) ;
45     return 0 ;
46 }

转载于:https://www.cnblogs.com/Christopher-Cao/p/5184757.html

bzoj3620 似乎在梦中见过的样子相关推荐

  1. [BZOJ3620]似乎在梦中见过的样子(kmp)

    题目描述 传送门 题目大意:给出一个字符串,求有多少个子串满足是A+B+A的形式,其中|A|>=k,|B|>=1. 题解 做这道题之前就已经知道了资瓷O(n2)O(n^2)的kmp 然后就 ...

  2. 【BZOJ 3620】 3620: 似乎在梦中见过的样子 (KMP)

    3620: 似乎在梦中见过的样子 Time Limit: 15 Sec  Memory Limit: 128 MB Submit: 755  Solved: 445 Description " ...

  3. 【kmp】似乎在梦中见过的样子

    参考博客: BZOJ 3620: 似乎在梦中见过的样子 [KMP]似乎在梦中见过的样子 题目描述 「Madoka,不要相信QB!」伴随着Homura的失望地喊叫,Madoka与QB签订了契约. 这是M ...

  4. 第2部分 字符串算法(提高篇)--第2章 KMP算法1469:似乎在梦中见过的样子

    1469:似乎在梦中见过的样子 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 476 通过数: 159 [题目描述] 原题来自:2014 年湖北省队互测 Week2 「Madok ...

  5. 似乎在梦中见过的样子 (KMP)

    # 10047. 「一本通 2.2 练习 3」似乎在梦中见过的样子 [题目描述] 「Madoka,不要相信 QB!」伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Mo ...

  6. BZOJ 3620 似乎在梦中见过的样子 KMP+暴力

    题目大意:给定一个字符串,求这个字符串有多少个子串满足这个子串可以拆分成ABA的形式,其中|A|>=k,|B|>=1 梦の中で逢った.ような-... n<=15000 显然是直接给你 ...

  7. 【bzoj3620】【似乎在梦中见过的样子】【kmp】

    Description "Madoka,不要相信 QB!"伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Modoka 的一个噩梦,也同时是上个轮回 ...

  8. 【BZOJ3620】似乎在梦中见过的样子 KMP

    链接: #include <stdio.h> int main() {puts("转载请注明出处[vmurder]谢谢");puts("网址:blog.csd ...

  9. 【bzoj3620】 似乎在梦中见过的样子 KMP

    一开始看到数据范围是15000就往后缀数组上想,想了好久没想出来怎么处理同一子串的问题,后来看了看题解才发现O(n^2)就可以过,用KMP类似NOI2014动物园的算法一样.枚举左端点,对于每个右端点 ...

  10. bzoj 3620: 似乎在梦中见过的样子

    Description "Madoka,不要相信 QB!"伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Modoka 的一个噩梦,也同时是上个轮回 ...

最新文章

  1. 浙江大学首次跻身全球50强,上海交大论文发表量全球第四 | QS最新世界大学排名...
  2. eureka源码:开启eureka server
  3. 群辉挂载linux nfs,Debian 9 挂载访问已设置的群晖NFS共享文件目录
  4. Metasploit是一款开源的安全漏洞检测工具,
  5. 常用的 iptables配置脚本
  6. asmx迷10分钟升级成wcf熟手指南
  7. C++11::遍历tuple中的元素
  8. JRuby--Java和Ruby的强强联合 Centos7.X
  9. 2017值得一瞥的JavaScript相关技术趋势
  10. Java常见gis开源框架,开源gis大全java
  11. MDI Jade6.5安装教程-附安装包
  12. Qt对图像的二值化处理
  13. MFC调用RDP实现远程桌面共享实例
  14. 初学MSP430SPI通信
  15. 宣传一个非常好看的鼠标指针样式
  16. 卸载wps后桌面上的office文件图标变成了白色(亲测有效)
  17. python学习——print和pprint两者的区别
  18. c++第二次作业-定期存款利息计算器
  19. html5红外遥控,做了个小的红外遥控装置
  20. 电子产品中EMC隔离设计的方法

热门文章

  1. C语言:一个五位数,判断其是否为回文数
  2. 计算机关闭的时候自动更新,win7自动更新关闭有什么影响_win7系统关闭自动更新的步骤-win7之家...
  3. [CodeForces - 276A] Lunch Rush
  4. 什么是去中心化?交易所为什么要去中心化?
  5. .com才是顶级域名,baidu.com是二级域名
  6. Android:是时候掌握WebView与Js的交互技术了
  7. 如果出现网络请求3840的这种错误
  8. red hat linux 6.4 DNS配置(怎么不让发表?)
  9. vc2005 seh新认识
  10. JavaScript(三)数据类型转换