HDU 6153 A Secret(kmp)
来源:互联网 发布:手机淘宝排名提升 编辑:程序博客网 时间:2024/06/05 03:45
题目:点击打开链接
题意:给两个字符串S1,S2,求S2中每个后缀子串在S1中出现的次数*该后缀子串长度,最后将所有这些求和。
思路:kmp是复杂度O(m+n)的较快的字符串匹配算法,但如果取出每个后缀子串进行字符串匹配的话是O(m(n+m))也就是O(n^2)的复杂度,则超时。所以该题只能一遍kmp找到并记录S2中每个后缀子串出现的次数,这就要求对kmp的内部运行十分了解。首先kmp是从头往后进行比对,所以题目给的S1,S2需要全部倒置后再kmp。对于kmp的相关改动为:枚举时的主串长度+1,j调到next[j]之前都要用数组a记录长度为j的匹配长度a[j]++,最后从后往前处理数组a,a[i]+=a[i+1],就得到了S2中每个后缀子串在S1中出现的次数a[i],再乘上每个后缀子串的长度,也就是i,相加取余得ans。
代码:
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int mod=1e9+7;const int N = 1e6+6;int nex[N];char S[N], T[N];int slen, tlen;int a[N];void getNext(){ int j, k; j = 0; k = -1; nex[0] = -1; while(j < tlen) if(k == -1 || T[j] == T[k]) nex[++j] = ++k; else k = nex[k];}void KMP_Count(){ int i, j = 0; if(slen == 1 && tlen == 1) { if(S[0] == T[0]) { a[1]=1; return; } else return; } getNext(); for(i = 0; i <= slen; i++) { while(j > 0 && S[i] != T[j]) { a[j]++; j = nex[j]; } if(S[i] == T[j]) { j++; } if(j == tlen) { a[j]++; j = nex[j]; } } return;}int main(){ int _T; scanf("%d",&_T); while(_T--) { scanf("%s%s",S,T); slen=strlen(S); tlen=strlen(T); reverse(S,S+slen); reverse(T,T+tlen); memset(a,0,sizeof(a)); KMP_Count(); ll ans=0; for(ll i=tlen; i>=1; i--) { a[i]=(a[i]+a[i+1])%mod; ans=(ans+a[i]*i%mod)%mod; } printf("%lld\n",ans); } return 0;}
阅读全文
0 0
- HDU 6153-A Secret(kmp&&ccpc)
- HDU 6153 A Secret(KMP)
- HDU 6153 A Secret (扩展KMP)
- HDU 6153A Secret(kmp)
- HDU 6153 A Secret(kmp)
- HDU 6153 A Secret(扩展KMP)
- A Secret(HDU 6153 扩展KMP)
- hdu 6153 A Secret KMP
- HDU 6153 A Secret KMP
- HDU 6153 A Secret KMP
- Hdu 6153 A Secret【KMP】
- 【KMP】HDU 6153 A Secret
- HDU 6153 A Secret(KMP)
- hdu 6153 A Secret (kmp)
- hdu 6153 A Secret (KMP)
- hdu 6153 A Secret(KMP)
- hdu 6153 A Secret(KMP)
- HDU 6153 A secret(kmp)
- 转发与重定向
- HTML5图片上传图片实时预览,通过DataURL将图片压缩“嵌入”到HTML中,优化图片的加载速度和执行效率。
- hdu 6153 A Secret (kmp)
- Unity-jenkins持续集成--配置
- 中文拼音排序
- HDU 6153 A Secret(kmp)
- gulp插件之-----转化es6代码到es5 取消严格模式 remove "use strict" directive Installation npm install babel-plugin-t
- android APK升级
- 二、maven项目搭建 springmvc+ spring + mybatis(2环境)
- 北京搜狐大数据
- jquery学习-1
- oracle恢复删除的数据
- 微信小程序项目实例
- PL/SQL编程基础知识(一)