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

HDU 1867:A + B for you again

2015-07-30 15:47 423 查看
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char a[100001],b[100001];
int nextd[100001];
void get(char *ch)
{
int s=0,t=-1;
nextd[0]=-1;
int l=strlen(ch);
while(s<l)
{
if(t==-1||ch[s]==ch[t])
{
s++;
t++;
nextd[s]=t;
}
else
t=nextd[t];
}
}
int KMP(char *ch1,char *ch2)
{
get(ch2);
int s=0,t=0;
int l1=strlen(ch1);
int l2=strlen(ch2);
while(s<l1)
{
if(t==-1||ch1[s]==ch2[t])
{
s++;
t++;
}
else
t=nextd[t];
}
return t;
}
int main()
{
int i,j,k,n,m,l;
while(~scanf("%s %s",a,b))
{
int l1=KMP(a,b);
int l2=KMP(b,a);
if(l1==l2)
{
if(strcmp(a,b)>0)
{
printf("%s%s\n",b,a+l1);
}
else
{
printf("%s%s\n",a,b+l1);
}
}
else if(l1>l2)
{
printf("%s%s\n",a,b+l1);
}
else
{
printf("%s%s\n",b,a+l2);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: