题意:

Return the amount of tetrad (a,b,c,d) which satisfy Sa..b + Sc..d = T , ab and cd.

思路:

正反两次kmp,匹配出最长前后缀的匹配次数.再进行统计.

注意的是统计的方法:

因为记录的是最长前后缀, 而统计时要将所有的前后缀都要算进去, 相当于每加一次, 都要沿着next回溯到-1. 有一种方法就是不断地向前累加"最长前后缀匹配次数"数组, 用迭代的方式节省不必要的循环.

坑:

注意下标:next下标小一.....

#include <cstdio>
#include <cstring>
using namespace std;
int const MAXN = 100005;
char s[MAXN],t[MAXN];
long long ord[MAXN],rev[MAXN],tmp[MAXN];
int ns,nt,next[MAXN];
void prekmp(char B[])
{next[0] = -1;int j = -1;for(int i=1;B[i];i++){while(j!=-1 && B[j+1]!=B[i])    j = next[j];if(B[j+1]==B[i])    j++;next[i] = j;}
}void kmp(char A[], char B[], long long ans[])
{memset(ans,0,sizeof(long long)*MAXN);int j = -1;for(int i=0;A[i];i++){while(j!=-1 && B[j+1]!=A[i])    j = next[j];if(B[j+1]==A[i])    j++;ans[j+1]++;if(!B[j+1]) j = next[j];}
}void reverse(char src[], int n)
{char ch;for(int i=0;i<(n>>1);i++){if(src[n-1-i] != src[i]){ch = src[n-1-i];src[n-1-i] = src[i];src[i] = ch;}}
}void get_ans(long long ans[], long long src[])
{for(int i=nt;i;i--){ans[i] = src[i];src[next[i-1]+1] += src[i];//index error}
}int main()
{int T;scanf("%d",&T);while(T--){scanf("%s%s",s,t);ns = strlen(s);nt = strlen(t);prekmp(t);kmp(s,t,tmp);get_ans(ord,tmp);reverse(s,ns);reverse(t,nt);prekmp(t);kmp(s,t,tmp);get_ans(rev,tmp);long long ans = 0;for(int i=1;i<nt;i++){ans += ord[i]*rev[nt-i];}printf("%lld\n",ans);}
}

[zoj 3587]Marlon's String[kmp]相关推荐

  1. Zoj 3587 Marlon's String (KMP 字符串拼接 前缀出现次数)

    题意:给字符串S,T,找到所有的tetrad (a,b,c,d), Sa..b + Sc..d = T , a≤b and c≤d.也就是把T分成两段,这两段都由S中的子串组成的,求有多少中组合方式( ...

  2. ZOJ 3587 Marlon's String

    KMP,每匹配到一点就记录一下,然后用fail数组把已经匹配到的但是kmp没有记录的点加上.... Marlon's String Time Limit: 2000MS   Memory Limit: ...

  3. ZOJ 3587 Marlon's String 扩展KMP

    链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3587 题意:给出两个字符串S和T,S,T<=100000.拿出 ...

  4. zoj 3587 Marlon's String(拓展KMP+dp)

    链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3587 题目大意: 给字符串S,T,   找到所有的tetrad ( ...

  5. ZOJ 3587 Marlon#39;s String 扩展KMP

    链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3587 题意:给出两个字符串S和T.S,T<=100000.拿出 ...

  6. ZOJ3587 Marlon's String KMP技巧处理

    题意:给定一个 T 串,一个 S 串,问由 S 串中的两个子串组成 T 串有多少种方式? 思路:这道题让我搞了好久,举个例子,将T串分成任意两段,那么必然是从中间断开的,即我们就需要在S中寻找和T的前 ...

  7. 【ZOJ3587】Marlon's String——白四爷×KMP 白濑肆の算法完全解读KMP篇 KMP来袭第二弹前缀什么的果然最讨厌了!【1.0%达成!】

    #include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> ...

  8. [KMP]zoj 3587:Marlon's String

    大致题意:     给出一个模式串P和一个文本串T求存在多少种数字组合(a,b,c,d)使得Ta..b + Tc..d = P. 大致思路:     可以用KMP求出模式串的每个前缀在文本串中出现的次 ...

  9. zoj2587 Marlon's String

    KMP 求子串的每个前缀在母串中出现的次数,然后反转再求一次,然后计算结果即可 PS:ZOJ评测好严格啊,不强制转换类型会WA...就因为这个WA了好久...一定不要偷懒啊!!! #include&l ...

最新文章

  1. 马斯克如何颠覆航天? 1/5385成本,c++和python编程!
  2. 开发者必备!Github 上 1.6W 星的「黑魔法」,早知道就不会秃头了
  3. 解决MyBatis中 Could not set property ~ o f ~异常
  4. Access快速连接SQL Server的方法(VB代码为例)
  5. 建立可扩展的silverlight应用框架 step-7 final
  6. VS2015 打包添加系统必备组件
  7. 【Python】机器学习矩阵运算必学库Numpy首秀!
  8. 美国无人机在火星首飞成功,创造历史,3米飞行高度悬停30秒
  9. 【渝粤教育】广东开放大学 网络市场与预测 形成性考核 (23)
  10. 【转】执行Import-SPWeb报错Import-SPWeb : Requested value 'PublishingPages' was not found
  11. Linux Makefile
  12. 登入Github、Git本地上传及Visual Studio Code上传教程
  13. 为什么要把id存到redis的key中_干货|mysql:exists还是in?哪个性能好?为什么?
  14. org.springframework.beans.BeanUtils
  15. 站长必须懂得技能:给网站设置ICO图标
  16. C# 中文乱码,转成中文
  17. 雷电模拟器的一些命令
  18. 一枚普通前端平淡无奇的一年 - 2021年终总结
  19. 简历优化实战案例01:工作经历篇
  20. 通过NFC挂载加载应用

热门文章

  1. mysql的char在java中表示为_Java学习篇之-Mysql中varchar门类总结_mysql
  2. 算法之地推算法(逆推法)
  3. html横向自动滚动代码,不间断无缝滚动代码(横向、竖向)
  4. iphone阅读模式翻页_iphone6s阅读模式怎么关闭
  5. 1.7 ThreadLocal的原理和使用详解
  6. Web后端servlet—使用servlet的Part接口实现单文件多文件上传、以及日期格式转换为sql日期格式的实现
  7. 去中心化金融的无常损失
  8. IOI 2005 Riv 河流 题解
  9. python中的高级特性
  10. Kyng Alisaunder