题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5763

思路:dp[i]表示前i个字符组成的字符串所表示的意思数量,则当匹配时dp[i]=dp[i-1]+dp[i-lenb],不匹配时dp[i]=dp[i-1]。匹配的判断可以用KMP。

  1. #include<cstdio>
  2. #include<cstring>
  3. using namespace std;
  4. typedef long long ll;
  5. const int N=1e5+3;
  6. const int mod=1e9+7;
  7. char a[N],b[N];
  8. ll dp[N];
  9. int lena,lenb,next[N];
  10. void get_next()
  11. {
  12. int j = 0 ,k = -1;
  13. next[0] = -1;
  14. while(j < lenb)
  15. {
  16. if(k == -1 || b[j] == b[k])
  17. {
  18. j++,k++;
  19. next[j] = k;
  20. }
  21. else k = next[k];
  22. }
  23. }
  24. void kmp()
  25. {
  26. get_next();
  27. int i = 0 ,j = 0;
  28. memset(dp,0,sizeof(dp));
  29. dp[0] = 1;
  30. while(i<lena)
  31. {
  32. if(j == -1||a[i]==b[j])
  33. {
  34. i++;
  35. dp[i] = dp[i-1];
  36. j++;
  37. }
  38. else j = next[j];
  39. if(j == lenb)
  40. {
  41. dp[i] = (dp[i-lenb] + dp[i]) % mod;
  42. j = next[j];
  43. }
  44. }
  45. }
  46. int main()
  47. {
  48. int T,cas=1;
  49. scanf("%d",&T);
  50. while(T--)
  51. {
  52. scanf("%s %s",a,b);
  53. lena=strlen(a),lenb=strlen(b);
  54. kmp();
  55. printf("Case #%d: %lld\n",cas++,dp[lena]);
  56. }
  57. return 0;
  58. }

HDU5763 another meaning -(KMP+DP)的更多相关文章

  1. [HDOJ5763]Another Meaning(KMP, DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5763 题意:给定两个字符串a和b,其中a中的字符串如果含有子串b,那么那部分可以被替换成*.问有多少种 ...

  2. HDU 5763 Another Meaning (kmp + dp)

    Another Meaning 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5763 Description As is known to all, ...

  3. 2021.11.09 P3426 [POI2005]SZA-Template(KMP+DP)

    2021.11.09 P3426 [POI2005]SZA-Template(KMP+DP) https://www.luogu.com.cn/problem/P3426 题意: 你打算在纸上印一串字 ...

  4. hdu_3336: Count the string(KMP dp)

    题目链接 题意:求给定字符串中,可以与某一前缀相同的所有子串的数量 做这道题需要明白KMP算法里next[]数组的意义 首先用一数组nex[](这里与之前博客中提到的next明显不同)存储前缀后缀最长 ...

  5. hdu 3336 count the string(KMP+dp)

    题意: 求给定字符串,包含的其前缀的数量. 分析: 就是求所有前缀在字符串出现的次数的和,可以用KMP的性质,以j结尾的串包含的串的数量,就是next[j]结尾串包含前缀的数量再加上自身是前缀,dp[ ...

  6. hdu3689(kmp+dp)

    题意:问随机生成一个长度为m(m<=1000)长度的字符串,出现某个子串s的概率是多少. 解法:dp+kmp优化.ans[i][j]表示i长度,走到了s的j位置的概率,当然这是在i之前没有出现s ...

  7. 【HDU 3336】Count the string(KMP+DP)

    Problem Description It is well known that AekdyCoin is good at string problems as well as number the ...

  8. hdu 6068--Classic Quotation(kmp+DP)

    题目链接 Problem Description When online chatting, we can save what somebody said to form his ''Classic ...

  9. HDU3336(KMP + dp)

    Count the string Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

随机推荐

  1. HDUOJ-------1052Tian Ji -- The Horse Racing(田忌赛马)

    Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  2. Merge Sorted Array [LeetCode]

    Given two sorted integer arrays A and B, merge B into A as one sorted array. Note:You may assume tha ...

  3. Python中T-SNE实现降维

    Python中T-SNE实现降维 from sklearn.manifold import TSNE from sklearn.datasets import load_iris from sklea ...

  4. LevelDb简单介绍和原理——本质:类似nedb,插入数据文件不断增长(快照),再通过删除老数据做更新

    转自:http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html 有时间再好好看下整个文章! 说起LevelDb也许您不清楚,但是如果作 ...

  5. ORACLE数据泵还原(IMPDP命令)【转】

      Oracle数据库还原IMPDP命令是相对于EXPDP命令的,方向是反向的.即对于数据库备份进行还原操作.一.知晓IMPDP命令 ? C:\>impdp -help Import: Rele ...

  6. POJ 1094 拓扑排序

    Description:      规定对于一个只有大写字母的字符串是有大小顺序的.如ABCD.即A<B.B<C.C<D.那么问题来了.现在第一行给你n, m代表序列里只会出现前n的 ...

  7. Android在Eclipse上的环境配置

    哈哈,首先转一个:https://my.oschina.net/fusxian/blog/293935 谢谢分享者 1.android SDK安装出现Failed to fetch URL http: ...

  8. wechat

  9. java.lang.InstantiationException

    java.lang.InstantiationException  出现这种异常的原因通常情况下是由于要实例化的对象是一个接口或者是抽象类等无法被实例化的类.

  10. Android 移动缩放的ImageView

    今天介绍一下Android中怎么实现ImageView的缩放和移动,自定义TouchImageView. public class TouchImageView extends ImageView { ...