您的位置:首页 > 大数据 > 人工智能

HDU1867 A + B for you again

2013-07-18 20:46 232 查看
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<memory.h>
#include<queue>
#include<stack>

#define N 100005
int next
;
char str1
,str2
;
void getnext(char *t)
{
int i=1,j=0;next[1]=0;
int len=strlen(t+1);
while(i<=len)
{
if(j==0 || t[i]==t[j])
{
i++,j++,next[i]=j;
}
else
j=next[j];
}
}
int kmp(char *s,char *t)
{
int i,j,len1,len2;
getnext(t);
len1=strlen(s+1);
len2=strlen(t+1);
i=1,j=1;
while(i<=len1 && j<=len2)
{
if(j==0 || s[i]==t[j])
i++,j++;
else
j=next[j];
}
if(i<=len1 && j>len2) //避免: kmp(asdf, sd)=2
return 0;
return j-1;
}
int main()
{
int m1,m2,j;
while(~scanf("%s%s",str1+1,str2+1))
{
m1=kmp(str1,str2);
m2=kmp(str2,str1);
if(m1 == m2)
{
if(strcmp(str1+1,str2+1)>=0)
{
printf("%s",str2+1);
for(j=m1+1;str1[j]!='\0';j++)
printf("%c",str1[j]);
}
else
{
printf("%s",str1+1);
for(j=m2+1;str2[j]!='\0';j++)
printf("%c",str2[j]);
}
}
else if(m1>m2)
{
printf("%s",str1+1);
for(j=m1+1;str2[j]!='\0';j++)
printf("%c",str2[j]);
}
else if(m2>m1)
{
printf("%s",str2+1);
for(j=m2+1;str1[j]!='\0';j++)
printf("%c",str1[j]);
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  KMP