BZOJ3620: 似乎在梦中见过的样子 KMP

原创 2017年01月03日 15:52:38

题意:给出一个小写字母字符串,求形如ABA(A的长度>=k)的子串个数。位置不同其他性质相同的子串算不同子串,位置相同但拆分不同的子串算同一子串。
n<=15000 , k<=100
暴力枚举左右端点就能过。
枚举每个左端点当做首字符进行KMP,对于一个右端点,沿着fail指针跳回去,经过的节点能满足”首字符到这个字符构成的前缀也是当前的后缀“。所以找到一个尽可能长的匹配前缀使得len*2+1<=当前区间长度(因为B这个成分至少要占一个字符),判断len是否大于K即可。

#include<cstdio>
using namespace std;
char t[20000],k;
long long ans=0;
inline long long count(const char *s)
{
    static int nexus[15000]={-1};
    long long res=0;
    for(int i=1;s[i];++i)
    {
        int &fail=nexus[i]=nexus[i-1];
        while(~fail&&s[fail+1]!=s[i]) fail=nexus[fail];
        if(s[fail+1]==s[i]) ++fail;
        int cp=fail;
        while(~cp&&(cp+1<<1)>=(i+1)) cp=nexus[cp];
        if(cp+1>=k) ++res;
    }
    return res;
}
int main()
{
    scanf("%s%d",t,&k);
    for(int i=0;t[i];++i)
    ans+=count(t+i);
    printf("%lld\n",ans);
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

bzoj3620 似乎在梦中见过的样子 kmp

..这题其实挺好想的,然而我想到正解以后,觉得不能过,然后摒弃了,打了个SA调了半天才发现位置不同才算不同否则全部相同。。 而且我正解时间复杂度分析错了,,以为是N^2结果实现以后才发现随便搞一搞就...

BZOJ3620

3620: 似乎在梦中见过的样子 Time Limit: 15 Sec  Memory Limit: 128 MB Submit: 68  Solved: 33 [Submit][Status]...
  • cymxyym
  • cymxyym
  • 2014年07月08日 19:45
  • 800

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

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

BZOJ3620: 似乎在梦中见过的样子 解题报告

这题一直没想出来,后来发现O(n2)O(n^2)能过…….SA+n2SA+n^2枚举 枚举一个左端点i,处理一下前缀i和每个前缀的height值,然后往右枚举右端点j,判一下height值是不是>k...

BZOJ3620 似乎在梦中见过的样子 - KMP算法

传送门 题解: 和NOI2014动物园一模一样 唯一的坑点在于这个题O(n^2)就可以过!!!!!!!! 代码: //BZOJ 3620 #include #include #include...
  • Mys_C_K
  • Mys_C_K
  • 2017年06月20日 09:58
  • 89

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

Description “Madoka,不要相信 QB!”伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Modoka 的一个噩梦,也同时是上个轮回中所发生的事...
  • lqybzx
  • lqybzx
  • 2014年11月26日 22:39
  • 563

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

题解: 对于一个区间[l,r][l,r] , 若存在一个长度≥k\ge k并且r−l2 的串K,它既相同于以ll为开端的等长串,又相同于以rr为结尾的等长串,那么这个区间就是一个可行串。 我们枚举...
  • Vmurder
  • Vmurder
  • 2015年03月20日 23:38
  • 1386

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

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

bzoj 3620: 似乎在梦中见过的样子 (KMP)

题目描述传送门题目大意:给出一个字符串,求所有满足形似于 A+B+A ,且len(A)>=k,len(B)>=1 (位置不同其他性质相同的子串算不同子串,位置相同但拆分不同的子串算同一子串)的子串的数...

KMP算法复习总结:Bzoj3620&&Bzoj3670

自从NOIP考完已经4个月没有写KMP了,最近考试考到了字符串相关题目才让我重新想起这个算法 事实证明我已经不会辣QAQ 趁早复习一下省的考到的时候挂了…… KMP算法就是一个next数组,记录...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BZOJ3620: 似乎在梦中见过的样子 KMP
举报原因:
原因补充:

(最多只允许输入30个字)