HDU 2594 Simpsons’ Hidden Talents (KMP)
题目链接: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)的更多相关文章
- HDU 2594 Simpsons’ Hidden Talents(KMP的Next数组应用)
Simpsons’ Hidden Talents Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...
- HDU 2594 Simpsons’ Hidden Talents(辛普森一家的潜在天赋)
HDU 2594 Simpsons’ Hidden Talents(辛普森一家的潜在天赋) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 3 ...
- hdu 2594 Simpsons’ Hidden Talents(两个串的next数组)
题意:两个字符串s.t,求s和t的最长的相同的前缀和后缀 思路:先求s的next数组,再求t的next数组(即代码中ex数组,此时不是自己与自己匹配,而是与s匹配),最后看ex[len2]即可(len ...
- hdu 2594 Simpsons’ Hidden Talents 【KMP】
题目链接:http://acm.acmcoder.com/showproblem.php?pid=2594 题意:求最长的串 同一时候是s1的前缀又是s2的后缀.输出子串和长度. 思路:kmp 代码: ...
- hdu 2594 Simpsons’ Hidden Talents(扩展kmp)
Problem Description Homer: Marge, I just figured out a way to discover some of the talents we weren’ ...
- hdu 2594 Simpsons’ Hidden Talents KMP
Simpsons’ Hidden Talents Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...
- hdu 2594 Simpsons’ Hidden Talents KMP应用
Simpsons’ Hidden Talents Problem Description Write a program that, when given strings s1 and s2, fin ...
- hdu 2594 Simpsons’ Hidden Talents(KMP入门)
Simpsons’ Hidden Talents Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...
- hdoj 2594 Simpsons’ Hidden Talents 【KMP】【求串的最长公共前缀后缀】
Simpsons' Hidden Talents Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...
随机推荐
- css3实现立方体效果
<!DOCTYPE html><html><head><meta charset="utf-8" /><title>&l ...
- python基础系列教程——Python库的安装与卸载
python基础系列教程——Python库的安装与卸载 2.1 Python库的安装 window下python2.python3安装包的方法 2.1.1在线安装 安装好python.设置好环境变量后 ...
- Java并发编程()阻塞队列和生产者-消费者模式
阻塞队列提供了可阻塞的put和take方法,以及支持定时的offer和poll方法.如果队列已经满了,那么put方法将阻塞直到有空间可用:如果队列为空,那么take方法将会阻塞直到有元素可用.队列可以 ...
- am335x ti SDK6.0 kernel 时钟源码文件记录
源码流程记录 板级文件开始 // arch/arm/mach-omap2/board-aplex_cmi_at101.c MACHINE_START(APLEX_CMI_AT101, "ap ...
- wm8976 codec
root@phyCORE-AM335x:~ amixer controlsnumid=38,iface=MIXER,name='Headphone Playback Switch'numid=39,i ...
- drupal 使用步骤
一.安装 二.汉化 ①.下载语言包文件:http://localize.drupal.org/translate/languages/zh-hans ②.将 .po 文件放置到 drupal7/pro ...
- [LintCode]删除链表中的元素
问题分析: 声明当前指针和上一个指针即可. 问题求解: public class Solution { public ListNode removeElements(ListNode head, in ...
- mysql 授权的时候库名不能添加单引号homestead.* 写成 '库名'.* 错的语法
create user 'wechat'@'192.168.10.%' identified by 'xxxxx'; create database 库名DEFAULT CHARSET utf8 CO ...
- Game Loop的几种实现方式
http://www.bennychen.cn/2011/06/game-loop-model/ —————————————————————————————— 写这篇博客的目的是为了对game loo ...
- laravel 5.1 的程序性能优化(配置文件)
命令优化 本文的目的是来弄清楚一些优化命令在 Laravel 5.1 和之前版本之间的差别. 在 15年6月发布的 Laravel 5.1版本中, 命令和他们的逻辑方法被清理掉, 本文章就是描述这些不 ...