题解:

EX_KMP

先计算出ex数组

然后ans统计前缀

然后乘一下就好了

代码:

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=,M=1e9+;
int n,sum[N],m,nxt[N],match[N],exnxt[N],exmatch[N];
int L[N],R[N];
char s1[N],s2[N],s[N];
void EXKMP(char s[],char t[],int n,int m)
{
exnxt[]=m;
for (int i=,po=;t[i];i++)
{
int P=po+exnxt[po];
exnxt[i]=max(min(exnxt[i-po],P-i),);
while (i+exnxt[i]<m&&t[exnxt[i]]==t[i+exnxt[i]])exnxt[i]++;
if (i+exnxt[i]>P) po=i;
}
for (int i=,po=;s[i];i++)
{
int P=po+exmatch[po];
exmatch[i]=max(min(exnxt[i-po],P-i),);
while (exmatch[i]<m&&i+exmatch[i]<n&&t[exmatch[i]]==s[i+exmatch[i]])exmatch[i]++;
if (i+exmatch[i]>P) po=i;
}
}
int main()
{
int T;
scanf("%d",&T);
while (T--)
{
memset(exnxt,,sizeof exnxt);
memset(exmatch,,sizeof exmatch);
memset(sum,,sizeof sum);
memset(s2,,sizeof s2);
memset(s1,,sizeof s1);
scanf("%s",&s);n=strlen(s);
for (int i=;i<n;i++)s1[i]=s[n-i-];
s1[n]='\0';
scanf("%s",&s);m=strlen(s);
for (int i=;i<m;i++)s2[i]=s[m-i-];
s2[n]='\0';
EXKMP(s1,s2,n,m);
for (int i=;s1[i];i++)sum[exmatch[i]]++;
for (int i=m;i>;i--)sum[i]+=sum[i+];
long long ans=;
for (int i=n;i>;i--)(ans+=((long long)i*sum[i]%M))%=M;
printf("%lld\n",ans);
}
return ;
}

hdu6153的更多相关文章

  1. hdu6153 扩展kmp求一个字符串的后缀在另一个字符串出现的次数。

    /** 题目:hdu6153 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6153 题意:给定两个串,求其中一个串t的每个后缀在另一个串s中出现的次数乘以 ...

  2. HDU-6153 A Secret 扩展KMP

    题意:求一个字符串的所有后缀在母串中的出现次数*后缀的长度的总和. 题目链接:http://acm.split.hdu.edu.cn/viewcode.php?rid=22147273 思路:先预处理 ...

  3. hdu6153 poj3336强化版kmp+线性dp

    发现很早以前用exkmp做过一次,但是对这题来说只要将两个串翻转一下即可转换成s2的所有前缀出现的问题 /* 给出s1,s2,求s2的每个后缀在s1中出现的次数 ans = sum{后缀长度*出现次数 ...

随机推荐

  1. 项目管理PV、EV、AC、BAC、EAC、ETC等计算

    PV[Planned Value]计划值:应该完成多少工作?[96版的BCWS] EV[Earned Value]挣值:完成了多少预算工作?[96版的BCWP] AC[Actual Cost]实际成本 ...

  2. cygwin下使用apt-cyg安装新软件

    1.获取  (记得先安装好git) git clone https://github.com/transcode-open/apt-cyg.git 2.安装apt-cyg cd apt-cyg chm ...

  3. 如何去除 gvim 的 acp和 "option omnifunc is not set" 的问题

    "option omnifunc is not set" 的问题, 确实是困扰了很久的问题! 首先, 在vim中,自动完成是通过两个文件来实现的, 自动完成, 就是 acp: = ...

  4. 小朋友排队|2014年蓝桥杯B组题解析第十题-fishers

    小朋友排队 n 个小朋友站成一排.现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友. 每个小朋友都有一个不高兴的程度.开始的时候,所有小朋友的不高兴程度都是0. 如果某个小朋 ...

  5. [BZOJ2963][JLOI2011]飞行路线 分层图+spfa

    Description Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并 ...

  6. linux 下 安装nginx

    http://www.cnblogs.com/lovexinyi8/p/5845017.html 测试可用. 参看 https://www.cnblogs.com/liujuncm5/p/671378 ...

  7. Unity3D学习笔记(十六):Animator新动画

    新动画系统: 给模型选择动画类型 普通动画:Generic 人形动画:Humanoid 建立动画控制器 - 在Project右击 - 选择Create-AnimatorContorller 将对应动画 ...

  8. nohup 日志切割

    最近遇到日志切割的问题,即程序是通过命令: nohup python *.py & 放到后台执行的,这样程序的日志输出到了nohup自动生成的nohup.out文件. 问题就来了,nohup. ...

  9. JS post 数组道后台

    $("#aSave").click(function () { if ($("#TaskName").val() == "") { aler ...

  10. WM_COPYDATA

    1. WM_COPYDATA : https://msdn.microsoft.com/en-us/library/windows/desktop/ms649011(v=vs.85).aspx COP ...