HDU5763 another meaning -(KMP+DP)

原创 2016年08月28日 16:09:50

Description

As is known to all, in many cases, a word has two meanings. Such as “hehe”, which not only means “hehe”, but also means “excuse me”.
Today, ?? is chating with MeiZi online, MeiZi sends a sentence A to ??. ?? is so smart that he knows the word B in the sentence has two meanings. He wants to know how many kinds of meanings MeiZi can express.

Input

The first line of the input gives the number of test cases T; T test cases follow.
Each test case contains two strings A and B, A means the sentence MeiZi sends to ??, B means the word B which has two menaings. string only contains lowercase letters.

Limits
T <= 30
|A| <= 100000
|B| <= |A|

Output

For each test case, output one line containing “Case #x: y” (without quotes) , where x is the test case number (starting from 1) and y is the number of the different meaning of this sentence may be. Since this number may be quite large, you should output the answer modulo 1000000007.

Sample Input

4
hehehe
hehe
woquxizaolehehe
woquxizaole
hehehehe
hehe
owoadiuhzgneninougur
iehiehieh

Sample Output

Case #1: 3
Case #2: 2
Case #3: 5
Case #4: 1


        
  

Hint

In the first case, “ hehehe” can have 3 meaings: “*he”, “he*”, “hehehe”. In the third case, “hehehehe” can have 5 meaings: “*hehe”, “he*he”, “hehe*”, “**”, “hehehehe”.


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


#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
const int N=1e5+3;
const int mod=1e9+7;
char a[N],b[N];
ll dp[N];
int lena,lenb,next[N];
void get_next()
{
    int j = 0 ,k = -1;
    next[0] = -1;
    while(j < lenb)
    {
        if(k == -1 || b[j] == b[k])
        {
            j++,k++;
            next[j] = k;
        }
        else k = next[k];
    }
}
void kmp()
{
    get_next();
    int i = 0 ,j = 0;
    memset(dp,0,sizeof(dp));
    dp[0] = 1;
    while(i<lena)
    {
        if(j == -1||a[i]==b[j])
        {
            i++;
            dp[i] = dp[i-1];
            j++;
        }
        else j = next[j];
        if(j == lenb)
        {
            dp[i] = (dp[i-lenb] + dp[i]) % mod;
            j = next[j];
        }
    }
}
int main()
{
    int T,cas=1;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%s %s",a,b);
        lena=strlen(a),lenb=strlen(b);
        kmp();
        printf("Case #%d: %lld\n",cas++,dp[lena]);
    }
    return 0;
}


hdu5763 Another Meaning(kmp+dp)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5763 Another Meaning Time Limit: 2000/1000 MS (Java/...
  • hkh746392783
  • hkh746392783
  • 2016年07月31日 23:21
  • 172

hdu5763 多校4 Another Meaning【kmp+dp】

题意: 给一个字符串和一个单词,问单词在串中的组合数。思路: 看到题想到了dp+kmp,推了一个别扭的转移方程,结果因为脑抽没过。。。 回头看了题解,比自己推得简单好多,而且发现不用kmp优化也...
  • lhfl911
  • lhfl911
  • 2016年07月29日 14:53
  • 110

HDU5763 Another Meaning动态规划

题目链接:HDU5763 Another Meaning Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/655...
  • qq_29480875
  • qq_29480875
  • 2016年07月30日 01:51
  • 263

HDU5763 Another Meaning

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5763 【题意】给定A,B两个字符串,B串有两个含义,问A串可能有几个含义。 【分析...
  • dDarkdawn
  • dDarkdawn
  • 2016年07月29日 08:42
  • 153

hdu5763 Another Meaning (DP+KMP)

思路: 令dp[i]表示到i结尾的字符串可以表示的不同含义数,那么考虑两种转移: 末尾不替换含义:dp[i - 1] 末尾替换含义:dp[i - |B|]  (A.substr(i ...
  • qq_21057881
  • qq_21057881
  • 2016年07月28日 20:25
  • 499

HDU 5763 Another Meaning(kmp+dp)

Description 给出一个文本串一个模式串,然后文本串中匹配到模式串就可以把匹配部分改成*,问文本串有多少种不同的情况 Input 第一行为一整数T表示用例组数,每组用例输入两个字符串a,...
  • V5ZSQ
  • V5ZSQ
  • 2016年08月10日 10:53
  • 271

HDOJ 5763 Another Meaning(kmp+dp)

Another Meaning Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)...
  • zwj1452267376
  • zwj1452267376
  • 2016年07月29日 21:47
  • 221

hdu5763 KMP+DP

题意:给一个文本串和一个模式串,模式串能被*代替,问文本串有几种表达方式 思路,首先用KMP把模式串找出来,在其末尾用vis标记,然后DP,若i被标记,则dp[i]=dp[i-1]+dp[i-m],否...
  • nuonuo_orz
  • nuonuo_orz
  • 2016年07月31日 16:00
  • 167

HDU 5763 Another Meaning(KMP+DP)

Problem Description As is known to all, in many cases, a word has two meanings. Such as “hehe”, whi...
  • baidu_27438681
  • baidu_27438681
  • 2016年07月29日 20:01
  • 111

hdu 5763 Another Meaning kmp+dp

题目链接:这里 题意: 给你一个字符串A,给你一个字符串B。 说B这个字符串有两个意思,请问字符串A一共有多少个意思 解法: DP,dp[i]表示以i结尾有多少种意思,然后用kmp去转移就好...
  • just_sort
  • just_sort
  • 2017年03月18日 10:14
  • 389
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU5763 another meaning -(KMP+DP)
举报原因:
原因补充:

(最多只允许输入30个字)