hdu6153-exkmp&&脑洞-A Secret
来源:互联网 发布:2014上半年经济数据 编辑:程序博客网 时间:2024/06/04 23:23
http://acm.hdu.edu.cn/showproblem.php?pid=6153
给定一个a串作为 母串,然后b作为模式串,
f【i】 为b的后缀的长度。
d[i] 为b这个后缀在 a串中出现的次数。。
问你他们的 积是多少,积mod1e9+7
。。
这个后缀很误导人惹
颠倒一下,发现这就是前缀出现的次数。
前缀??? exkmp的 extend就是 母串子串和模式串的 最长公共前缀呢。。
然后组合数一下就好了(高中的知识,不要误会qwq,比方匹配的长度为3,则会有长度1 ,2,3,的子串个出现一次,总和为6.发现 len*(len+1)/2。。。 )
图中显示了 extand数组的含义。。这大概也是我现在理解的exkmp的全部了把qwq
#include <bits/stdc++.h>using namespace std;const int maxn=1e6+1000;const int mod=1e9+7;typedef long long ll;int Next[maxn],ex[maxn];void kmp(char P[]){ int m=strlen(P); Next[0]=m; int j=0,k=1; while(j+1<m&&P[j]==P[j+1]) j++; Next[1]=j; for(int i=2; i<m; i++) { int p=Next[k]+k-1; int L=Next[i-k]; if(i+L<p+1) Next[i]=L; else { j=max(0,p-i+1); while(i+j<m&&P[i+j]==P[j]) j++; Next[i]=j; k=i; } }}void exkmp(char P[],char T[]){ int m=strlen(P),n=strlen(T); kmp(P); int j=0,k=0; while(j<n&&j<m&&P[j]==T[j]) j++; ex[0]=j; for(int i=1; i<n; i++) { int p=ex[k]+k-1; int L=Next[i-k]; if(i+L<p+1) ex[i]=L; else { j=max(0,p-i+1); while(i+j<n&&j<m&&T[i+j]==P[j]) j++; ex[i]=j; k=i; } }}int main(){ int t; char a[maxn]; char b[maxn]; scanf("%d",&t); while(t--){ scanf("%s",a); int len1=strlen(a); scanf("%s",b); int len2=strlen(b); reverse(a,a+len1); reverse(b,b+len2); exkmp(b,a); ll ans=0; for(int i=0;i<len1;i++){ if(ex[i]){ cout<<ex[i]<<endl; ans=(ans+(1ll*(ex[i]+1)*ex[i]/2)%mod)%mod; } } printf("%lld\n",ans); } return 0;}
阅读全文
0 0
- hdu6153-exkmp&&脑洞-A Secret
- HDU6153-A Secret
- [kmp] hdu6153 A Secret
- HDU6153-A Secret
- hdu6153(kmp) A Secret
- HDU6153-A Secret ex-kmp
- HDU6153 A Secret 扩展KMP
- hdu6153(kmp) A Secret
- 【HDU6153】A Secret(扩展KMP)
- [扩展kmp] hdu6153 A Secret
- hdu6153 A Secret CCPC1004 扩展KMP
- hdu6153-A Secret (kmp/扩展kmp)
- hdu6153 A Secret (拓展KMP)
- HDU6153 A Secret(扩展KMP)2017中国大学生程序设计竞赛
- A Secret
- exkmp
- Exkmp
- creat a secret folder
- sg函数模板
- 深入理解JVM总结-类文件结构
- window cmd常见命令
- RTMP/FLV学习注意要点
- 四个并发工具类CountDownLatch,CyclicBarrier,Semaphore,Exchanger
- hdu6153-exkmp&&脑洞-A Secret
- LeetCode随笔之Array
- 使用freemarker导出word文档包含多张图片
- keras中文文档笔记13——解释CNN的滤波器
- codevs1298 凸包周长 解题报告
- PopuWindow用法
- WCF绑定netTcpBinding寄宿到控制台应用程序
- 袋鼠过河
- oracle增删改查语法