题意:求一个字符串的所有后缀在母串中的出现次数*后缀的长度的总和。

题目链接:http://acm.split.hdu.edu.cn/viewcode.php?rid=22147273

思路:先预处理sum[1...n]的值及sum[i]=1+..+i,然后将两个字符串反转,然后用扩展KMP求出翻转后的母串的EX数组。然后对任一个位置的他对答案的贡献就是sum[EX[i]];

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxn 1000005
typedef long long ll;
const int MOD=1e9+;
ll num[maxn];
char s[maxn];
char t[maxn];
int Next[maxn];
int ex[maxn];
void init()
{
num[]=;
for(int i=;i<=maxn;i++)
num[i]=(num[i-]+i)%MOD;
}
void GETNEXT(char *str)
{
int i=,j,po,len=strlen(str);
Next[]=len;
while(str[i]==str[i+]&&i+<len)
i++;
Next[]=i;
po=;
for(i=;i<len;i++)
{
if(Next[i-po]+i<Next[po]+po)
Next[i]=Next[i-po];
else
{
j=Next[po]+po-i;
if(j<)j=;
while(i+j<len&&str[j]==str[j+i])
j++;
Next[i]=j;
po=i;
}
}
}
ll EXKMP(char *s1,char *s2)
{
int i=,j,po,len=strlen(s1),l2=strlen(s2);
GETNEXT(s2);
ll sum=;
while(s1[i]==s2[i]&&i<l2&&i<len)
i++;
ex[]=i;
po=;
sum=(sum+num[ex[]])%MOD;
for(i=;i<len;i++)
{
if(Next[i-po]+i<ex[po]+po)
ex[i]=Next[i-po];
else
{
j=ex[po]+po-i;
if(j<)j=;
while(i+j<len&&j<l2&&s1[j+i]==s2[j])
j++;
ex[i]=j;
po=i;
}
sum=(sum+num[ex[i]])%MOD;
}
return sum;
}
int main()
{
init();
int k;
scanf("%d",&k);
while(k--)
{
scanf("%s%s",s,t);
strrev(s);
strrev(t);
printf("%lld\n",EXKMP(s,t));
}
return ;
}

HDU-6153 A Secret 扩展KMP的更多相关文章

  1. HDU 6153 A Secret(扩展KMP模板题)

    A Secret Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 256000/256000 K (Java/Others) Total ...

  2. 【kmp或扩展kmp】HDU 6153 A Secret

    acm.hdu.edu.cn/showproblem.php?pid=6153 [题意] 给定字符串A和B,求B的所有后缀在A中出现次数与其长度的乘积之和 A和B的长度最大为1e6 方法一:扩展kmp ...

  3. HDU 6153 A Secret(扩展kmp)

    A Secret Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 256000/256000 K (Java/Others)Total ...

  4. HDU 4333 Revolving Digits 扩展KMP

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=4333 题意:给以数字字符串,移动最后若干位到最前边,统计得到的数字有多少比原来大,有多少和原来同样,有多少 ...

  5. HDU 3613 Best Reward(扩展KMP求前后缀回文串)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3613 题目大意: 大意就是将字符串s分成两部分子串,若子串是回文串则需计算价值,否则价值为0,求分割 ...

  6. HDU 4333 Revolving Digits [扩展KMP]【学习笔记】

    题意:给一个数字,每一次把它的最后一位拿到最前面,一直那样下去,分别求形成的数字小于,等于和大于原来数的个数. SAM乱搞失败 当然要先变SS了 然后考虑每个后缀前长为n个字符,把它跟S比较就行了 如 ...

  7. A - A Secret -扩展KMP

    题目大意: 给你两个字符串A,B,现在要你求B串的后缀在A串中出现的次数和后缀长度的乘积和为多少. 题解: 扩展KMP模板题,将A和B串都逆序以后就变成了求前缀的问题了,扩展KMP求处从i位置开始的最 ...

  8. 2017中国大学生程序设计竞赛 - 网络选拔赛 1004 HDU 6153 A Secret (字符串处理 KMP)

    题目链接 Problem Description Today is the birthday of SF,so VS gives two strings S1,S2 to SF as a presen ...

  9. 2017中国大学生程序设计竞赛 - 网络选拔赛 HDU 6153 A Secret KMP,思维

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6153 题意:给了串s和t,要求每个t的后缀在在s中的出现次数,然后每个次数乘上对应长度求和. 解法:关 ...

随机推荐

  1. 10Linux_firewalld-Linux就该这么学

    firewalld: runtime:当前生效,重启后失效(默认) permanent:当前不生效,重启后永久生效. A:重启,B:执行firewall-cmd --reload 数据链路层:ipta ...

  2. AES五种加密模式(CBC、ECB、CTR、OCF、CFB)

    --转载https://www.cnblogs.com/starwolf/p/3365834.html https://www.freebuf.com/column/171939.html 分组密码有 ...

  3. Unable to docker login through CLI - unauthorized: incorrect username or password

    Unable to docker login through CLI - unauthorized: incorrect username or password To solve it proper ...

  4. Autowried注解和Resource注解的区别

    目录 1.概述 2.Autowried 3.Resource 4.总结 1.概述 在使用Spring框架的过程中, 依赖注入是必须的, 大多时候会使用Autowried注解来进行依赖注入, 但是也可以 ...

  5. .net core 2.2 修改IdentityUser主键标识类型

    .net core2.2,生成WebApi或者MVC项目后,Identity 1.增加ApplicationUser.cs文件,内容如下 public class ApplicationUser : ...

  6. jquery 事件的触发与绑定

    bind事件绑定: live事件绑定: hover事件绑定: one事件绑定 toggle事件绑定:

  7. 20175213 2018-2019-2 《Java程序设计》第6周学习总结

    教材学习内容总结 1.第七章:内部类与异常类 ①.内部类和外嵌类之间的重要关系: ·内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法. ·内部类的类体中不可以声明类变 ...

  8. weui复选框无法传值

    //原来的反了 function changeState (ele) { if(ele.checked){ ele.setAttribute('checked','checked') console. ...

  9. unable to resolve module react-native-gesture-handler from

    在安装了npm install --save react-navigation后跑项目然后就红屏了. 解决方法: 安装触摸方式(需要执行以下方法) npm install --save react-n ...

  10. Java Web解决跨域请求

    要知道跨域请求就要先了解同源策略,那么什么是同源?什么是不同源?简单来说就是,如果两个资源,包括HTML页面.JavaScript脚本.css样式,对应的协议.域名和端口完全相同,那么这两个资源就是同 ...