题目大意:给你两个串,一长一短,如果长串中某个子串和短串完全相同,则这个子串可以被替换成"#",求长串所有的表达形式.......

比如"hehehehe"和"hehe",则有5种情况,"#hehe","he#he","hehe#","##","hehehehe"

首先我们KMP/哈希找出长串中所有可以作为和短串结尾匹配成功后的位置

然后可以得到方程

                         (不是子串结尾)

  (是子串结尾)

至于原因呢,如果它不是子串结尾,那么它不能被替换,所以是

而如果它是子串结尾,它既可以不被替换,即

也可以被替换,那么替换整个短串,转移的地方就是

然后转移一下即可,建议从1开始读入字符串方便转移

 #include <cstdio>
#include <algorithm>
#include <cstring>
#define N 100100
#define mod 1000000007
#define ui unsigned int
#define ll long long
using namespace std; int T,ls,lt;
int ed[N],nxt[N];
ui f[N];
char s[N],t[N];
void get_kmp()
{
int i=,j=;
nxt[]=;
while(i<=lt)
{
if(j==||t[i]==t[j])
{
i++;
j++;
nxt[i]=j;
}else{
j=nxt[j];
}
}
}
void KMP()
{
int i=,j=;
while(i<=ls)
{
if(j==||s[i]==t[j])
{
i++;
j++;
}else{
j=nxt[j];
}
if(j==lt+)
{
ed[i-]=;
j=nxt[j];
}
}
}
ui solve()
{
f[]=;
for(int i=;i<=ls;i++)
{
if(ed[i]==)
{
f[i]=(f[i-lt]+f[i-])%mod;
}else{
f[i]=f[i-];
}
}
return f[ls];
} int main()
{
//freopen("aa.in","r",stdin);
scanf("%d",&T);
for(int i=;i<=T;i++)
{
memset(nxt,,sizeof(nxt));
memset(ed,,sizeof(ed));
memset(f,,sizeof(f));
scanf("%s",s+),ls=strlen(s+);
scanf("%s",t+),lt=strlen(t+);
get_kmp();
KMP();
printf("Case #%d: %u\n",i,solve());
}
return ;
}

HDU 5763 Another Meaning (KMP/哈希+DP)的更多相关文章

  1. HDU 5763 Another Meaning KMP+DP

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5763 Another Meaning Time Limit: 2000/1000 MS (Java/ ...

  2. HDU 5763 Another Meaning

    HDU 5763 Another Meaning 题意:一个字串有可能在模式串出现多次,问有多少种可能出现的情况.关键是有重合的字串是不能同时计入的. 思路:先用kmp求出所有字串的位置.然后,dp. ...

  3. HDU 5763 Another Meaning (kmp + dp)

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

  4. HDU 5763 Another Meaning(DP+KMP)

    http://acm.hdu.edu.cn/showproblem.php?pid=5763 题意: 给出一个字符串和一个模式串,模式串有两种意思,问这句话有几种意思. 思路:因为肯定要去字符串去找模 ...

  5. HDU 5763 Another Meaning dp+字符串hash || DP+KMP

    题意:给定一个句子str,和一个单词sub,这个单词sub可以翻译成两种不同的意思,问这个句子一共能翻译成多少种不能的意思 例如:str:hehehe   sub:hehe 那么,有**he.he** ...

  6. TTTTTTTTTTTTTT hdu 5763 Another Meaning 哈希+dp

    Another Meaning Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  7. 【动态规划】【KMP】HDU 5763 Another Meaning

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5763 题目大意: T组数据,给两个字符串s1,s2(len<=100000),s2可以被解读成 ...

  8. HDU 5763 Another Meaning(FFT)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5763 [题目大意] 给出两个串S和T,可以将S串中出现的T替换为*,问S串有几种表达方式. [题解 ...

  9. HDU 5782 Cycle(KMP+哈希)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=5782 题意:给出两个长度相等的字符串,输出两个字符的每个前缀是否循环相同. 思路: 如果连个串循环相 ...

随机推荐

  1. webstorm + babel

    网上有很多关于如何设置babel的.我学习着设置,但总差那么几步,没能满足我的需求. 我使用的是webStorm2017.1版本. babel安装准备 使用webStorm自带的filewatcher ...

  2. [网络流24题] 最长k可重线段集问题 (费用流)

    洛谷传送门 LOJ传送门 最长k可重区间集问题的加强版 大体思路都一样的,不再赘述,但有一些细节需要注意 首先,坐标有负数,而且需要开$longlong$算距离 但下面才是重点: 我们把问题放到了二维 ...

  3. Cocos2d切换场景出现的问题-error C2653: “***”不是类或命名空间名称

    1,在开头引入头文件 2,在要引入的头文件中,去除以下代码: #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #endif ...

  4. vue-cli3.0 搭建项目

    1.首先我们先在安装好node   node用于npm安装[自行百度] 2.全局安装vue 通过npm命令安装vue.js 在用vue.js在用于构建大型的应用时推荐使用npm安装,npm能很好的和w ...

  5. 【ACM-ICPC 2018 沈阳赛区网络预赛 G】Spare Tire

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 让你求出1..n中和m互质的位置i. 让你输出∑ai 这个ai可以oeis一波. 发现是ai = i(i+1) 1..n中和m互质的 ...

  6. java陷阱之spring事物未提交和回滚导致不可预知问题

    案发现场 //防止全局配置了 所以这里定义sprnig 不托管事物 @Transactional(propagation = Propagation.NOT_SUPPORTED) public boo ...

  7. Ajax jQuery下拉框联动案例

    需求: 使用ajax和jQuery实现下拉框联动. 注意:需要加入jquery-2.1.1.min.js 前台 <!DOCTYPE html> <html> <head& ...

  8. Cannot Allocate New Log

    http://www.itpub.net/thread-1842569-1-1.html http://czmmiao.iteye.com/blog/2277675

  9. Nginx 做系统的前端反向proxy

    Nginx是一款很优秀的基于event的webserver.吞吐量大.占用资源少,只是文档就很让人郁闷了,免费的Nginx和收费的Nginx+的文档共用一份,配置完之后才发现免费的Nginx启动某些命 ...

  10. C++实现位数组

    当我们遇到大量整数排序时候为了节省内存空间我们能够考虑使用bit数组来实现,缺点是其仅仅适用于正整数. 思想: 在32位系统一个int类型占4个字节,按位来计算一个int类型能够记录32个数.因此,採 ...