题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2594

这题直接用KMP算法就能够做出来,只是我还尝试了用扩展的kmp,这题用扩展的KMP效率没那么高。

KMP算法:

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
int next[50001];
char p[50000],s[50000];
void getnext()
{
int plen=strlen(p),k=0,j=1;
next[0]=-1;next[1]=0;
while (j<plen)
{
if (k==-1||p[j]==p[k])
{
k++;j++;
next[j]=k;
}
else k=next[k];
}
}
int kmp()
{
int i=0,j=0,slen=strlen(s),plen=strlen(p);
while (i<slen)
{
if (j == -1 || s[i] == p[j])
{
i++;
j++;
}
else j=next[j];
}
if (j==-1) j=0;
return j;
}
int main()
{
int i;
while (scanf("%s%s",p,s)!=EOF)
{
getnext();
i=kmp();
if (i)
{
for (int j=0;j<i;j++)
printf("%c",p[j]);
printf(" %d\n",i);
}
else printf("0\n");
}
return 0;
}

扩展的KMP:

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
char S[50000],T[50000];
int A[50001],B[50001],sl,tl;
void getA()
{
int j=0;
while(1+j<tl&&T[0+j]==T[1+j]) j++;
A[1]=j;
int k=1;
for(int i=2;i<tl;i++)
{
int len=k+A[k]-1,l=A[i-k];
if(l<len-i+1) A[i]=l;
else
{
j=max(0,len-i+1);
while(i+j<tl&&T[i+j]==T[0+j])
j=j+1;
A[i]=j;k=i;
}
}
}
void getB()
{
getA();
int j=0;
while(j<sl&&j<tl&&T[0+j]==S[0+j])
j++;B[0]=j;
int k=0;
for(int i=1;i<sl;i++)
{
int len=k+B[k]-1,l=A[i-k];
if(l<len-i+1) B[i]=l;
else
{
j=max(0,len-i+1);
while(i+j<sl&&j<tl&&S[i+j]==T[0+j])
j=j+1;
B[i]=j,k=i;
}
}
}
int main()
{
int i;
while (~scanf ("%s %s",T,S))
{
int num=0;
sl=strlen(S),tl=strlen(T);
getB();
for (i=0;i<sl;i++)
if (B[i]==sl-i)
{
num=B[i];
break;
}
if (num>0)
{
for (int j=0;j<num;j++)
printf("%c",T[j]);
printf(" ");
}
printf("%d\n",num);
}
return 0;
}

HDU 2594 Simpsons’ Hidden Talents (KMP)的更多相关文章

  1. HDU 2594 Simpsons’ Hidden Talents(KMP的Next数组应用)

    Simpsons’ Hidden Talents Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...

  2. HDU 2594 Simpsons’ Hidden Talents(辛普森一家的潜在天赋)

    HDU 2594 Simpsons’ Hidden Talents(辛普森一家的潜在天赋) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 3 ...

  3. hdu 2594 Simpsons’ Hidden Talents(两个串的next数组)

    题意:两个字符串s.t,求s和t的最长的相同的前缀和后缀 思路:先求s的next数组,再求t的next数组(即代码中ex数组,此时不是自己与自己匹配,而是与s匹配),最后看ex[len2]即可(len ...

  4. hdu 2594 Simpsons’ Hidden Talents 【KMP】

    题目链接:http://acm.acmcoder.com/showproblem.php?pid=2594 题意:求最长的串 同一时候是s1的前缀又是s2的后缀.输出子串和长度. 思路:kmp 代码: ...

  5. hdu 2594 Simpsons’ Hidden Talents(扩展kmp)

    Problem Description Homer: Marge, I just figured out a way to discover some of the talents we weren’ ...

  6. hdu 2594 Simpsons’ Hidden Talents KMP

    Simpsons’ Hidden Talents Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...

  7. hdu 2594 Simpsons’ Hidden Talents KMP应用

    Simpsons’ Hidden Talents Problem Description Write a program that, when given strings s1 and s2, fin ...

  8. hdu 2594 Simpsons’ Hidden Talents(KMP入门)

    Simpsons’ Hidden Talents Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...

  9. hdoj 2594 Simpsons’ Hidden Talents 【KMP】【求串的最长公共前缀后缀】

    Simpsons' Hidden Talents Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...

随机推荐

  1. 随笔记:如何使用Python连接(/操作)Oracle数据库(Windows平台下)

    遇到需求,我们需要用Python对Oracle数据库进行操作. 这次我们使用cx_Oracle Oracle Client 在安装cx_Oracle之前,先安装Oracle客户端. cx_Oracle ...

  2. vue路由配置,vue子路由配置

    上一篇关于vue环境配置已经写好了!按照操作就行了! 现在一个项目已经部署完成,接下来我们从路由开始! 还记得在初始化项目的时候,有提示是否需要安装vue-router,对没错,vue中路由全靠它! ...

  3. zuul超时及重试配置1

    eureka: client: register-with-eureka: true serviceUrl: defaultZone: http://localhost:8761/eureka/ se ...

  4. ypbind启动失败

    [root@bs035 test]# cat /etc/yp.conf # /etc/yp.conf - ypbind configuration file# Valid entries are## ...

  5. hdu1429(bfs+状态压缩)

    思路:有十个门,有十把钥匙,每把钥匙对应一个门,相同的门可以有多个.这样,我们就得按照状态来搜索,用0000000001代表第一个门有钥匙了,1000000000代表第十个门钥匙有了.......一次 ...

  6. 纯CSS3实现漂亮的价格表样式代码

    分享一款纯CSS3实现漂亮的价格表样式代码是一款常见的主机商发布产品价格信息页.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div id="main" ...

  7. 一款由css3和jquery实现的响应式设计导航

    2014年响应式设计成为设计主流.今天要给大家带来一款由css3和jquery实现的响应式设计导航.当显示器为pc时,导航为横条.当客户端为移动端时,呈现坚形导航.我们一起看下效果图: 在线预览    ...

  8. 关于使用samba用户的权限设置

    首先要保证你的samba安装并配置好,关于安装和配置samba请参考此文章http://blog.csdn.net/linglongwunv/archive/2010/01/19/5212875.as ...

  9. 【WPF】查找父/子控件(元素、节点)

    整理一下项目中常用的找控件功能,包括找父/子控件.找到所有同类型子控件(比如ListBox找到所有Item). using System; using System.Collections.Gener ...

  10. Java:单例模式的七种写法<转>

    第一种(懒汉,线程不安全):  1 public class Singleton {   2     private static Singleton instance;   3     privat ...