题目链接: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. py自动化之环境配置

    1,官网下载py,点击安装,配置环境变量 2,下载setuptools,用于安装pip (python setup.py install) 3,下载pip,用于安装selenium(pip insta ...

  2. js 三元表达式

    JavaScript三元运算符的多种使用技巧 发现代码慢慢写多了的时候会不自觉的将if else 用 三元来替代,仅仅是未了让代码更简洁精辟,当然也有人说用三元可以让你有高潮的感觉.最近在写js 的时 ...

  3. 将ip地址转换成C段地址的UDF

    将ip地址转换成C段地址的UDF,最重要的是判断IP地址的正则表达式. package cn.cnnic.ops.Study; import java.util.regex.Pattern; impo ...

  4. Disable Maven Nature和disable workspace resolution

    1.Disable Maven Nature myeclipse更新maven的时候,手抖了一下,点上了Disable Maven Nature,然后工程右键菜单中的Maven栏就不见了! 其实这是把 ...

  5. C语言 · 新建Microsoft Word文档

    算法提高 新建Microsoft Word文档   时间限制:1.0s   内存限制:256.0MB      问题描述 L正在出题,新建了一个word文档,想不好取什么名字,身旁一人惊问:“你出的题 ...

  6. pthread_cond_wait()函数的详解

    http://hi.baidu.com/tjuer/item/253cc6d66b921317d90e4483 了解 pthread_cond_wait() 的作用非常重要 -- 它是 POSIX 线 ...

  7. linux终端无打印信息的实现

    linux启动时会又大量信息打印,若要使启动信息不打印,需修改内核中两处: 1. 内核配置项. CONFIG_SERIAL_ATMEL_CONSOLE=y    //去掉终端配置选项.2. 内核解压缩 ...

  8. vim打开后乱码,xshell打开后也是乱码,设置自动出现行号

    Xshell对于嵌入式开发来说,是个非常不错的工具.但或许都有过被中文显示为乱码的问题感觉有点不爽.解决方法其实很简单的,即把xshell编码方式改成UTF-8即可. [文件]–>[打开]–&g ...

  9. B2B(企业对企业)、B2C(企业对个人)、C2C(个人对个人)

    B2B(企业对企业).B2C(企业对个人).C2C(个人对个人)

  10. 【转】苹果App Store新规:6月1日后所有应用必须支持IPv6-only网络

    在WWDC2015上苹果宣布iOS9将支持纯IPv6的网络服务.2016年初开始所有提交到App Store的应用必须支持IPv6.为确保现有的应用是兼容的,我们需要注意下面几点. 不建议使用底层的网 ...