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】

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

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

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

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

BZOJ传送门 Time Limit: 15 Sec Memory Limit: 128 MB Submit: 351 Solved: 194 [Submit][Status][Discus...
  • qq_18455665
  • qq_18455665
  • 2016年02月28日 18:28
  • 227

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

3620: 似乎在梦中见过的样子 Time Limit: 15 Sec  Memory Limit: 128 MB Submit: 834  Solved: 491 [Submit][Status][...
  • BlackJack_
  • BlackJack_
  • 2017年07月02日 23:21
  • 120

BZOJ 3620: 似乎在梦中见过的样子(kmp)

Description“Madoka,不要相信 QB!”伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Modoka 的一个噩梦,也同时是上个轮回中所发生的事.为了使...
  • Ab_Ever
  • Ab_Ever
  • 2017年06月15日 20:47
  • 294

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

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

bzoj 3620: 似乎在梦中见过的样子 kmp算法+暴力

题意“Madoka,不要相信 QB!”伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Modoka 的一个噩梦,也同时是上个轮回中所发生的事.为了使这一次 Madok...
  • qq_33229466
  • qq_33229466
  • 2017年03月15日 21:52
  • 75

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

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

改进的KMP算法

/*改进的字符串匹配算法 改进的KMP算法*/ #include #include #include int next[100];//全局变量 int KMP(char S[],char ...
  • silence2015
  • silence2015
  • 2016年02月22日 15:10
  • 1060

从头到尾彻底理解KMP(转载自July)

从头到尾彻底理解KMP 作者:July 时间:最初写于2011年12月,2014年7月21日晚10点 全部删除重写成此文,随后的半个多月不断反复改进。 1...
  • wjy0330
  • wjy0330
  • 2014年09月26日 23:31
  • 1568
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BZOJ3620: 似乎在梦中见过的样子 KMP
举报原因:
原因补充:

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