KMP

求子串的每个前缀在母串中出现的次数,然后反转再求一次,然后计算结果即可

PS:ZOJ评测好严格啊,不强制转换类型会WA。。。就因为这个WA了好久。。。一定不要偷懒啊!!!

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>#define N 100050using namespace std;int jump[N],ans1[N],ans2[N];
char s1[N],s2[N],t1[N],t2[N];void init(char *t)
{jump[0]=-1;int j=-1,len=strlen(t);for(int i=1;i<len;i++){while(j>-1&&t[i]!=t[j+1])j=jump[j];if(t[i]==t[j+1])j++;jump[i]=j;}
}
void kmp(char *s,char *t)
{int j=-1,len=strlen(s),len2=strlen(t);for(int i=0;i<len;i++){while(j>-1&&s[i]!=t[j+1])j=jump[j];if(s[i]==t[j+1]){j++;ans1[j]++;}//if(j==len2-1)//{// printf("%d\n",i-len2+1);//}}
}
void kmp2(char *s,char *t)
{int j=-1,len=strlen(s),len2=strlen(t);for(int i=0;i<len;i++){while(j>-1&&s[i]!=t[j+1])j=jump[j];if(s[i]==t[j+1]){j++;ans2[j]++;}//if(j==len2-1)//{// printf("%d\n",i-len2+1);//}}
}
int main()
{int tc,len1,len2;long long ans;scanf("%d",&tc);getchar();while(tc>0){tc--;memset(ans1,0,sizeof(ans1));memset(ans2,0,sizeof(ans2));gets(s1);gets(s2);len1=strlen(s1),len2=strlen(s2);init(s2);kmp(s1,s2);for(int i=len2-1;i>=0;i--)if(jump[i]!=-1)ans1[jump[i]]+=ans1[i];                     //这个要注意t1[len1]='\0';t2[len2]='\0';for(int i=len1-1;i>=0;i--)t1[len1-i-1]=s1[i];for(int i=len2-1;i>=0;i--)t2[len2-i-1]=s2[i];init(t2);kmp2(t1,t2);for(int i=len2-1;i>=0;i--)if(jump[i]!=-1)ans2[jump[i]]+=ans2[i];                     //这个要注意ans=0;//for(int i=0;i<len2;i++)printf("%d\n",ans1[i]);//cout<<endl;//for(int i=0;i<len2;i++)printf("%d\n",ans2[i]);for(int i=0;i<len2-1;i++)ans+=(long long)ans1[i]*(long long)ans2[len2-i-2];          //一定要强制类型转换啊,切记!!printf("%lld\n",ans);}return 0;
}

zoj2587 Marlon's String相关推荐

  1. ZOJ 3587 Marlon's String

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

  2. 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中的子串组成的,求有多少中组合方式( ...

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

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

  4. Marlon's String zoj3587

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4629 后缀数组或扩展kmp SA做法 #include <iostrea ...

  5. ZOJ3587 Marlon's String

    KMP,正着处理一遍,反着处理一遍,但是用递归的方式一个一个统计会超时,最后累加一下比较好= = #include <cstdio> #include <cstring> #i ...

  6. ZOJ 3587 Marlon's String 扩展KMP

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

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

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

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

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

  9. [zoj 3587]Marlon's String[kmp]

    题意: Return the amount of tetrad (a,b,c,d) which satisfy Sa..b + Sc..d = T , a≤b and c≤d. 思路: 正反两次kmp ...

最新文章

  1. Uber做出艰难决定:关掉AI实验室,彭博社:Uber没有梦想
  2. 深度学习AI美颜系列---天天P图疯狂变脸算法
  3. 操作系统原理第八章:内存管理
  4. pymysql单条插入数据和批量插入数据:
  5. linux 32位平台,文件大小受限于2G的解决方法
  6. 详解GaussDB(DWS) explain分布式执行计划
  7. 润乾集算报表实现多数据集关联的示例
  8. Bailian4128 单词序列【BFS】
  9. mysql大表数据抽取_从云数据迁移服务看MySQL大表抽取模式
  10. 程序员面试宝典——第6章
  11. jQuery实现动态添加删除表格的行
  12. matlab dlt标定,实验三 Matlab图像处理基本操作及摄像机标定(DLT)
  13. Android为什么图片模糊不清,Android打开图库中图片为什么从模糊变清晰
  14. Java中ElasticSearch的各种查询(普通,模糊,前缀,高亮,聚合,范围)
  15. 蓝牙加密方案,蓝牙方案,蓝牙usbkey,蓝牙key,蓝牙U盾,蓝牙智能卡(公交卡等CPU卡),蓝牙身份认证产品分享,蓝牙公交卡,蓝牙会员卡
  16. minus用法c语言,Minus-C 一个最小化的C语言规范
  17. Scary Movie 4
  18. GANs(生成对抗网络)浅析
  19. 乱斗西游小白龙技能预设释放顺序
  20. Python3:类和对象-烤地瓜

热门文章

  1. CGO arm 树莓pi下的交叉编译
  2. 购买你的青春和一切ZT
  3. 求最长不下降序列:逆推法
  4. 河南大学计算机专业就业率,2021考研择校择专业:河南大学就业率和薪酬情况...
  5. QCon上海2015盛大开幕
  6. 北大软微2021计算机考研难度,2021北京大学软微计算机智能科技方向考研报录情况及备考经验分享...
  7. 1124: 成语接龙
  8. 操作系统实验:添加系统调用修改主机名(hostname)
  9. mailbox的controller
  10. html5 选择金额样式,[JavaScript] 数字金额大写转换 v2