zoj2587 Marlon's String
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相关推荐
- ZOJ 3587 Marlon's String
KMP,每匹配到一点就记录一下,然后用fail数组把已经匹配到的但是kmp没有记录的点加上.... Marlon's String Time Limit: 2000MS Memory Limit: ...
- 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中的子串组成的,求有多少中组合方式( ...
- 【ZOJ3587】Marlon's String——白四爷×KMP 白濑肆の算法完全解读KMP篇 KMP来袭第二弹前缀什么的果然最讨厌了!【1.0%达成!】
#include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> ...
- Marlon's String zoj3587
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4629 后缀数组或扩展kmp SA做法 #include <iostrea ...
- ZOJ3587 Marlon's String
KMP,正着处理一遍,反着处理一遍,但是用递归的方式一个一个统计会超时,最后累加一下比较好= = #include <cstdio> #include <cstring> #i ...
- ZOJ 3587 Marlon's String 扩展KMP
链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3587 题意:给出两个字符串S和T,S,T<=100000.拿出 ...
- zoj 3587 Marlon's String(拓展KMP+dp)
链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3587 题目大意: 给字符串S,T, 找到所有的tetrad ( ...
- ZOJ3587 Marlon's String KMP技巧处理
题意:给定一个 T 串,一个 S 串,问由 S 串中的两个子串组成 T 串有多少种方式? 思路:这道题让我搞了好久,举个例子,将T串分成任意两段,那么必然是从中间断开的,即我们就需要在S中寻找和T的前 ...
- [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 ...
最新文章
- Uber做出艰难决定:关掉AI实验室,彭博社:Uber没有梦想
- 深度学习AI美颜系列---天天P图疯狂变脸算法
- 操作系统原理第八章:内存管理
- pymysql单条插入数据和批量插入数据:
- linux 32位平台,文件大小受限于2G的解决方法
- 详解GaussDB(DWS) explain分布式执行计划
- 润乾集算报表实现多数据集关联的示例
- Bailian4128 单词序列【BFS】
- mysql大表数据抽取_从云数据迁移服务看MySQL大表抽取模式
- 程序员面试宝典——第6章
- jQuery实现动态添加删除表格的行
- matlab dlt标定,实验三 Matlab图像处理基本操作及摄像机标定(DLT)
- Android为什么图片模糊不清,Android打开图库中图片为什么从模糊变清晰
- Java中ElasticSearch的各种查询(普通,模糊,前缀,高亮,聚合,范围)
- 蓝牙加密方案,蓝牙方案,蓝牙usbkey,蓝牙key,蓝牙U盾,蓝牙智能卡(公交卡等CPU卡),蓝牙身份认证产品分享,蓝牙公交卡,蓝牙会员卡
- minus用法c语言,Minus-C 一个最小化的C语言规范
- Scary Movie 4
- GANs(生成对抗网络)浅析
- 乱斗西游小白龙技能预设释放顺序
- Python3:类和对象-烤地瓜
热门文章
- CGO arm 树莓pi下的交叉编译
- 购买你的青春和一切ZT
- 求最长不下降序列:逆推法
- 河南大学计算机专业就业率,2021考研择校择专业:河南大学就业率和薪酬情况...
- QCon上海2015盛大开幕
- 北大软微2021计算机考研难度,2021北京大学软微计算机智能科技方向考研报录情况及备考经验分享...
- 1124: 成语接龙
- 操作系统实验:添加系统调用修改主机名(hostname)
- mailbox的controller
- html5 选择金额样式,[JavaScript] 数字金额大写转换 v2