HDU5763 Another Meaning动态规划
来源:互联网 发布:c语言智能五子棋游戏 编辑:程序博客网 时间:2024/05/20 19:16
题目链接:HDU5763
Another Meaning
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 843 Accepted Submission(s): 391
Problem 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.
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|
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
4hehehehehewoquxizaolehehewoquxizaoleheheheheheheowoadiuhzgneninouguriehiehieh
Sample Output
Case #1: 3Case #2: 2Case #3: 5Case #4: 1HintIn 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-lt];dp[i-1]为当以i结尾的字串不翻译为第二个意思时,dp[i-lt]就是翻译为第二个意思了。可以先用kmp把所有可能产生二义的位置hash出来,注意i-lt可能会出现-1的情况,把它替换成0就行了。
//// main.cpp// Another Meaning//// Created by teddywang on 2016/7/28.// Copyright © 2016年 teddywang. All rights reserved.//#include <iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char s[100010],t[100010];int nexts[100010];int ls,lt;int p[100010];int dp[100010];int mod=1000000007,ans,num;void getnext(){ int i=0,j=-1; nexts[0]=-1; while(i<lt&&j<lt) { if(j==-1||t[i]==t[j]) { nexts[++i]=++j; } else j=nexts[j]; }}void kmp(){ int i=0,j=0; while(i<ls&&j<lt) { if(j==-1||s[i]==t[j]) { ++i;++j; if(j==lt) { p[i-1]=1; j=nexts[j]; } } else j=nexts[j]; }}int main(){ int T; scanf("%d",&T); for(int k=1;k<=T;k++) { memset(dp,0,sizeof(dp)); memset(p,0,sizeof(p)); scanf("%s%s",s,t); ls=strlen(s),lt=strlen(t); getnext(); kmp(); if(p[0]==1) dp[0]=2; else dp[0]=1; for(int i=1;i<ls;i++) { dp[i]=(dp[i-1]+p[i]*dp[max(i-lt,0)])%mod; } printf("Case #%d: %d\n",k,dp[ls-1]); }}
0 0
- HDU5763 Another Meaning动态规划
- HDU5763 Another Meaning
- hdu5763 Another Meaning(kmp+dp)
- hdu5763 Another Meaning(DP+KMP)
- hdu5763 多校4 Another Meaning【kmp+dp】
- HDU5763 another meaning -(KMP+DP)
- 【动态规划】【KMP】HDU 5763 Another Meaning
- 2016多校训练Contest4: 1001 Another Meaning hdu5763
- (多校第四场1001)HDU5763 Another Meaning (DP、KMP)
- 100道动态规划——38 HDU 5763 Another Meaning KMP + DP
- Another Meaning
- Another Meaning
- HDU 5763 Another Meaning
- HDU 5763 Another Meaning
- HDU 5763 Another Meaning
- HDOJ 5763 Another Meaning
- 【HDU】5763 Another Meaning
- hdu 5763 Another Meaning
- LinkedList源码解析
- Vim快速移动光标
- DRLogistics项目开发记(序 起于维谷,兴于乱世,终于一统)
- Eclipse错误:找不到或无法加载主类
- 经验如何提高PHP执行效率的50个技巧
- HDU5763 Another Meaning动态规划
- HDU 5710 Digit-Sum
- iOS线程和进程的区别和联系
- 多线程的作用和实现方法
- codeforces-Powers of Two(map的应用)
- LightOJ1129->动态Trie树
- 在Windows下为PHP5.5安装redis扩展
- 百练 2624 4th Point .
- 三字棋小游戏