发现很早以前用exkmp做过一次,但是对这题来说只要将两个串翻转一下即可转换成s2的所有前缀出现的问题

  1. /*
  2. 给出s1,s2,求s2的每个后缀在s1中出现的次数
  3. ans = sum{后缀长度*出现次数}
  4. 思路:把数组倒过来,求s2的nxt数组
  5.  
  6. cnt[i]当匹配到s2的第i位可以对答案做的贡献
  7. cnt[i]=当前与s1第i个字符配对的s2的前缀长度+cnt[nxt[j]]
  8. */
  9. #include<iostream>
  10. #include<cstring>
  11. #include<cstdio>
  12. using namespace std;
  13. #define mod 1000000007
  14. #define maxn 1000005
  15. #define ll long long
  16.  
  17. char s1[maxn],s2[maxn];
  18. int nxt[maxn],m,cnt[maxn],ans;
  19. void reserve(char *s){
  20. int len=strlen(s);
  21. int i=,j=len-;
  22. while(i<j){
  23. swap(s[i],s[j]);
  24. ++i,--j;
  25. }
  26. }
  27. void kmp_pre(char *s){
  28. memset(nxt,,sizeof nxt);
  29. int m=strlen(s);
  30. int i,j;
  31. i=,j=nxt[]=-;
  32. while(i<m){
  33. while(j!=- && s[i]!=s[j]) j=nxt[j];
  34. nxt[++i]=++j;
  35. }
  36. for(int i=;i<=m;i++)
  37. cnt[i]=(i+cnt[nxt[i]])%mod;
  38. }
  39. void kmp(){
  40. int n=strlen(s1),m=strlen(s2);
  41. int i=,j=;
  42. while(i<n){
  43. while(j!=- && s1[i]!=s2[j])
  44. j=nxt[j];
  45. ++i,++j;
  46. ans=(ans+cnt[j])%mod;
  47. if(j==m)j=nxt[j];
  48. }
  49. }
  50. int main(){
  51. int t;
  52. scanf("%d",&t);
  53. while(t--){
  54. memset(cnt,,sizeof cnt);
  55. scanf("%s%s",s1,s2);
  56.  
  57. reserve(s1);
  58. reserve(s2);
  59. kmp_pre(s2);
  60. ans=;
  61. kmp();
  62. printf("%d\n",ans);
  63. }
  64. }

hdu6153 poj3336强化版kmp+线性dp的更多相关文章

  1. [KOJ6024]合并果子·改(强化版)

    [COJ6024]合并果子·改(强化版) 试题描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多把这些果子堆排成一排,然后所有的果子合成一堆.    每一次合并 ...

  2. bzoj1009 KMP+矩阵dp

    https://www.lydsy.com/JudgeOnline/problem.php?id=1009 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(<=Xi<=), ...

  3. [django]数据导出excel升级强化版(很强大!)

    不多说了,原理采用xlwt导出excel文件,所谓的强化版指的是实现在网页上选择一定条件导出对应的数据 之前我的博文出过这类文章,但只是实现导出数据,这次左思右想,再加上网上的搜索,终于找出方法实现条 ...

  4. LightOJ1044 Palindrome Partitioning(区间DP+线性DP)

    问题问的是最少可以把一个字符串分成几段,使每段都是回文串. 一开始想直接区间DP,dp[i][j]表示子串[i,j]的答案,不过字符串长度1000,100W个状态,一个状态从多个状态转移来的,转移的时 ...

  5. Codeforces 176B (线性DP+字符串)

    题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=28214 题目大意:源串有如下变形:每次将串切为两半,位置颠倒形成 ...

  6. hdu1712 线性dp

    //Accepted 400 KB 109 ms //dp线性 //dp[i][j]=max(dp[i-1][k]+a[i][j-k]) //在前i门课上花j天得到的最大分数,等于max(在前i-1门 ...

  7. 动态规划——线性dp

    我们在解决一些线性区间上的最优化问题的时候,往往也能够利用到动态规划的思想,这种问题可以叫做线性dp.在这篇文章中,我们将讨论有关线性dp的一些问题. 在有关线性dp问题中,有着几个比较经典而基础的模 ...

  8. POJ 2479-Maximum sum(线性dp)

    Maximum sum Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 33918   Accepted: 10504 Des ...

  9. poj 1050 To the Max(线性dp)

    题目链接:http://poj.org/problem?id=1050 思路分析: 该题目为经典的最大子矩阵和问题,属于线性dp问题:最大子矩阵为最大连续子段和的推广情况,最大连续子段和为一维问题,而 ...

随机推荐

  1. POJ - 2828 Buy Tickets(线段树单点更新)

    http://poj.org/problem?id=2828 题意 排队买票,依次给出当前人要插队的位置,每个人有个编号,然后问你最后整个的序列是什么? 分析 最后一个人的要插入的位置是确定的,所以逆 ...

  2. Redis模块学习笔记(一)RediSearch简单使用

    说明:安装的Redis服务器必须为 4.0 以上版本,通过info命令查看 > INFO redis_version: 一.安装 RediSearch git clone https://git ...

  3. 转--python 中写单例

    原文地址 原文地址2 Python中的单例模式的几种实现方式的及优化 阅读目录(Content) 单例模式 实现单例模式的几种方式 1.使用模块 2.使用装饰器 3.使用类 4.基于__new__方法 ...

  4. UBUNTU18.4环境下使用更好用的搜索引擎(无奈,只能起这样的标题)

    初步安装 更新软件源 sudo apt-get update 安装pip (一个安装和管理 Python 包的工具) sudo apt-get install python-pip sudo apt- ...

  5. luogu P4074 [WC2013]糖果公园

    传送门 这种题显然要用树上莫队 何为树上莫队?就是在树上跑莫队算法就是先把树分块,然后把询问离线,按照左端点所在块为第一关键字,右端点所在块为第二关键字,时间戳(如果有修改操作)为第三关键字排序,然后 ...

  6. JavaScript学习 - 基础(三) - 运算符

    js运算符 1.算数运算符 包括 加(+) .减-() .乘(*).除(/).余数(%) 减号 还可以表示为 负号 例如: -1,-3 加号 还可以用于字符串拼接 例如: 'a' + 'b' = 'a ...

  7. oracle_集合函数

    查询10和20号部门的员工 SQL> 1. select * from emp where deptno in (10,20); SQL> 2. select * from emp whe ...

  8. Python中的exec、eval使用实例

    Python中的exec.eval使用实例 这篇文章主要介绍了Python中的exec.eval使用实例,本文以简洁的方式总结了Python中的exec.eval作用,并给出实例,需要的朋友可以参考下 ...

  9. Two Sum I & II & III & IV

    Two Sum I Given an array of integers, find two numbers such that they add up to a specific target nu ...

  10. freeRTOS中文实用教程3--中断管理之延迟中断处理

    1.前言 嵌入式实时操作系统需要对整个系统环境产生的事件作出响应.可以采用中断方式也可以采用轮询方式来进行处理.如果采用中断方式,则希望ISR(中断服务例程)的处理时间越短越好. 注:必须说明的是,只 ...