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

比如"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. php设置cookie和删除cookie

    设置cookie Example : - set - <?php setcookie( "name", "value", "future_tim ...

  2. UVA1585 - Score(紫书习题3.1)

    如何计算你们的得分呢?,如"OOXXOXXOOO". "O"表示问题的正确答案,"X"表示错误的答案.那么它得分是由它自己和它刚刚以前连续的 ...

  3. [转载]解决/usr/bin/ld: cannot find -lxxx

    在linux环境编译应用程式或lib的source code时常常会出现如下的错误讯息: /usr/bin/ld: cannot find -lxxx 这些讯息会随着编译不同类型的source cod ...

  4. Elasticsearch 入门 - 安装、启动和配置

    安装 请参阅elastic官网 :Installing Elasticsearch 启动 使用 ./bin/elasticsearch 命令即可启动 使用 ./bin/elasticsearch -d ...

  5. FreeMarker 页面静态化解决方案

    一.网页的静态化方案 1.生成静态页面的时机:在做添加操作时,同时生成该新增内容的对应的静态页面 2.静态页面的名称:内容 id + ".html" 3.静态页面所在的路径:工程外 ...

  6. redis 参数配置总结

    redis.conf 配置项说明如下 1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程   daemonize no 2. 当Redis以守护进程方式运行时, ...

  7. [Tailwind] Control What Variations are Generated for Each Utility Class Module in Tailwind

    In this lesson, we learn how to control what utility classes are generated for each utility class mo ...

  8. 上机题目(0基础)- Java网络操作-Socket实现client和server端通信(Java)

    非常多刚開始学习的人对于java网络通信不太熟悉.对相关概念也不太明确,这里我们主要实现一下socket通信,socket通信在java中应用十分广泛.比如QQ和MSN等都是基于socket通信的,什 ...

  9. HDU 2838 (树状数组求逆序数)

    题意: 给你N个排列不规则的数(1~N),任务是把它从小到大排好,每次仅仅能交换相邻两个数,交换一次的代价为两数之和.求最小代价 思路:对于当前数X.我们如果知道前面比它大的数有多少,如果为K,那么有 ...

  10. android开发一些小bug

    1.一定要注意findViewId这种方法,尤其是含有多个同样的R.id的名字时,debug时不会当场报错.但随后会报空指针错误 2.List转换为Array能够这样处理: ArrayList< ...