A - A Secret -扩展KMP
#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
const int N = 1000005;
int Next[N];
long long ex[N],tong[N]; //即extand[]
char p[N],t[N];
int T;
long long ans;
void pre() // next[i]: 以第i位置开始的子串 与 T的公共前缀
{
int lp=strlen(p);
Next[0]=lp;
int j=0,k=1;
while(j+1<lp && p[j]==p[j+1]) j++;
Next[1]=j;
for(int i=2; i<lp; 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<lp && p[i+j]==p[j]) j++; // 枚举(p+1,length) 与(p-k+1,length) 区间比较
Next[i]=j;
k=i;
}
}
}
void exkmp()
{
int lp=strlen(p),lt=strlen(t);
pre(); //next数组初始化
int j=0,k=0;
while(j<lt && j<lp && p[j]==t[j]) j++;
ex[0]=j;
for(int i=1; i<lt; 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<lt && j<lp && t[i+j]==p[j]) j++;
ex[i]=j;
k=i;
}
}
}
int main()
{ scanf("%d",&T);
while(T--)
{
memset(tong,0,sizeof(tong));
scanf("%s%s",&t,&p);
int lt=strlen(t);
int lp=strlen(p);
reverse(p,p+lp);
reverse(t,t+lt);
exkmp();
ans=0;
for(int i=0; i<lt; i++)
tong[ex[i]]++;
for(int i=lp;i;i--)
{
tong[i]=(tong[i]+tong[i+1])%mod;
ans=(ans+tong[i]*i%mod)%mod;
}
printf("%lld\n",ans); }
}
A - A Secret -扩展KMP的更多相关文章
- HDU-6153 A Secret 扩展KMP
题意:求一个字符串的所有后缀在母串中的出现次数*后缀的长度的总和. 题目链接:http://acm.split.hdu.edu.cn/viewcode.php?rid=22147273 思路:先预处理 ...
- HDU 6153 A Secret(扩展kmp)
A Secret Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 256000/256000 K (Java/Others)Total ...
- HDU 6153 A Secret(扩展KMP模板题)
A Secret Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 256000/256000 K (Java/Others) Total ...
- A - A Secret (扩展kmp)
题目链接:https://cn.vjudge.net/contest/283743#problem/A 题目大意:给你字符串s1和s2,然后问你s2的每一个后缀在s1中出现的次数之和(可重叠). 具体 ...
- 【kmp或扩展kmp】HDU 6153 A Secret
acm.hdu.edu.cn/showproblem.php?pid=6153 [题意] 给定字符串A和B,求B的所有后缀在A中出现次数与其长度的乘积之和 A和B的长度最大为1e6 方法一:扩展kmp ...
- HDU 6153 扩展kmp
A Secret Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 256000/256000 K (Java/Others)Total ...
- 扩展KMP算法
一 问题定义 给定母串S和子串T,定义n为母串S的长度,m为子串T的长度,suffix[i]为第i个字符开始的母串S的后缀子串,extend[i]为suffix[i]与字串T的最长公共前缀长度.求出所 ...
- 扩展KMP --- HDU 3613 Best Reward
Best Reward Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=3613 Mean: 给你一个字符串,每个字符都有一个权 ...
- KMP和扩展KMP
文章网上太多这里提一下代码细节: KMP: scanf("%s\n",s); scanf("%s\n",t); int ls=strlen(s),lt=strl ...
随机推荐
- STM32的内存管理
ref:https://www.cnblogs.com/leo0621/p/9977932.html 这里针对STM32F407芯片+1M外部内存的内存管理!(全篇是个人愚见,如果错误,请不吝指出!) ...
- input表单强制大小写
如题,在HTML页面中常常有遇到强制表单大小写的场景. 在css中设置,HTML页面元素引用就可以了 强制大写: .toUp{ text-transform:uppercase; } 强制小写: .t ...
- dataTable 实战总结
后台项目中经常会用到 dataTable 进行表格的智能绘制:总结一下项目中经常用到的 dataTable 设置 1.dataTable 属性设置: autoWidth: true, // 是否自动计 ...
- webpack-dev-server live reloading 技术实现
webpack-dev-server live reloading https://github.com/webpack/webpack-dev-server Use webpack with a ...
- 20175333曹雅坤 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- TinyMCE
段落段落段落段落 标题1 标题2 标题3 标题4 标题5 标题6
- dash视频服务器本地搭建 (初探)
2019-4-17 15:54:17 星期三 技术说明: dash: 将一个大视频分解成不同分辨率, 不同清晰度的小视频, 以及一个描述文件(后缀: mpd), 根据网络带宽自动调整视频流, 看起来更 ...
- -bash: yum: command not found
在学习Linux时,发现yum命令无法执行.便查了下,整理成文. yum介绍 Yum(全称为 Yellow dogUpdater, Modified)是一个在Fedora和RedHat以及CentOS ...
- 2小程序canvas使用,及一些坑,以及自己的一些小总结
自己做了一个小程序,主要用于给头像加图标的那种,和qq似的,主要用canvas做的, 第一回用,掉了很多坑,所以今天总结一下自己所做的,如果大家有不理解的地方,欢迎提问:如果帮到大家的话,帮忙点个啥的 ...
- IDEA创建完整目录maven项目
鉴于第三次利用idea建立完整目录maven项目时仍要反反复复地问度娘,特此记录 1.第一步,进行project-> 勾选Create from archetype,搜索maven.archet ...