HDOJ 5763 (2016多校联合训练 Training Contest 4) Another Meaning
来源:互联网 发布:淘宝怎么修改发货单号 编辑:程序博客网 时间:2024/06/05 20:37
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5763
题意:给我们一个母串a和模板串b,我们可以把母串里面包含的模板串换成另一个串,问我们最终可以得到多少种不同的串。
这题我们用到的思路就是KMP+DP。
首先,我们用KMP求解出所有的能够匹配模板串的位置,然后就可以开始DP求解了,状态转移方程为:
1.如果当前位置没有匹配到模板串,则dp[i] = dp[i-1];
2.如果当前位置匹配到了模板串,则dp[i] = dp[i-1] + dp[i-strlen(b)];
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 100000+10;const int MOD = 1e9+7;char a[maxn], b[maxn];int vis[maxn], nex[maxn], dp[maxn];int n,m;void getNext(){int j,k;j = 0,k = -1;nex[0] = -1;while(j < m){if(k == -1 || b[j] == b[k])nex[++j] = ++k;else k = nex[k];}}void KMP(){int i=0, j=0;getNext();while(i<n){if(j == -1 || a[i] == b[j])i++, j++;else j = nex[j];if(j == m){vis[i] = 1;j = nex[j];}}}int main(){int T, t=1;scanf("%d", &T);while(T--){scanf("%s%s", a, b);n = strlen(a), m = strlen(b);for(int i=0; i<=n; i++) vis[i] = 0, dp[i] = 0;KMP();dp[0] = 1;for(int i=1; i<=n; i++){dp[i] = dp[i-1] % MOD;if(vis[i]) dp[i] = (dp[i] + dp[i-m]) % MOD;}printf("Case #%d: %d\n", t++, dp[n]);}}
0 0
- HDOJ 5763 (2016多校联合训练 Training Contest 4) Another Meaning
- HDOJ 5775 (2016多校联合训练 Training Contest 4) Bubble Sort
- HDOJ 5773 (2016多校联合训练 Training Contest 4) The All-purpose Zero
- 2016多校联合训练赛 第四场1001 Another Meaning hdu 5763
- 2016 Multi-University Training Contest 4 1001 Another Meaning
- 2016 Multi-University Training Contest 4 Another Meaning
- 2016 多校 Multi-University Training Contest 4 Another Meaning
- 2016 Multi-University Training Contest 4 1001 Another Meaning (DP)
- HDOJ 5723 (2016多校联合训练 Training Contest 1) Abandoned country
- HDOJ 5738 (2016多校联合训练 Training Contest 2) Eureka
- HDOJ 5744 (2016多校联合训练 Training Contest 2) Keep On Movin
- HDOJ 5742 (2016多校联合训练 Training Contest 2) It's All In The Mind
- HDOJ 5734 (2016多校联合训练 Training Contest 2) Acperience
- HDOJ 5752 (2016多校联合训练 Training Contest 3) Sqrt Bo
- HDOJ 5753 (2016多校联合训练 Training Contest 3) Permutation Bo
- HDOJ 5754 (2016多校联合训练 Training Contest 3) Life Winner Bo
- HDOJ 5792 (2016多校联合训练 Training Contest 5) World is Exploding
- HDOJ 5791 (2016多校联合训练 Training Contest 5) Two
- HectorSLAMGmappingKartoSLAMCoreSLAMLagoSLAM
- [乐意黎原创]Win 10 输入法的切换调整
- Python正则表达式指南
- 码神有感
- 华为OJ 初级:输出单向链表中倒数第k个结点
- HDOJ 5763 (2016多校联合训练 Training Contest 4) Another Meaning
- keil c 常见错误和警告
- 阿里云centOs下搭建Web应用步骤
- java设计模式_享元模式
- webApi——传参详解
- x86分页机制——《x86汇编语言:从实模式到保护模式》读书笔记42
- java基础目录
- 第三章:linear models for regression exericse 1-7
- 数组的四种排序方式