#include <stdio.h>
char W[100010],T[100010];
int Next[100010];
void getNext(char W1[])
{
int len=strlen(W1);
int i=0,j=-1;
Next[0]=-1;
while(i<len)
{
if(j==-1||W1[i]==W1[j])
{
i++;
j++;
Next[i]=j;
}
else j=Next[j];
}
}
int Kmp(char W1[],char T1[])
{
int len1=strlen(W1);
int len2=strlen(T1);
int i=0;
int j=0;
getNext(W1);
while(i<len2)
{
if(j==-1||W1[j]==T1[i])
{
i++;
j++;
}
else j=Next[j];
}
return j;
}
int main()
{
int outCome1,outCome2,len,i;
while(~scanf("%s %s",T,W))
{
outCome1=Kmp(W,T);
outCome2=Kmp(T,W);
if(outCome1>outCome2||(outCome1==outCome2&&strcmp(T,W)<=0))
{
printf("%s",T);
len=strlen(W);
for(i=outCome1; i<len; i++)
{
printf("%c",W[i]);
}
}
else
{
printf("%s",W);
len=strlen(T);
for(i=outCome2; i<len; i++)
{
printf("%c",T[i]);
}
}
printf("\n");
}
return 0;
}
杭电1867
最新推荐文章于 2021-05-18 22:21:18 发布