Time Limit : 5000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 30 Accepted Submission(s) : 9
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn=100010; int next[maxn]; char s1[maxn],s2[maxn]; void getnext(char *t){ int len=strlen(t); int i=0,j=-1; next[0]=-1; while(i<len){ if(j==-1 || t[i]==t[j]){ i++;j++; next[i]=j; }else j=next[j]; } } int KMP(char *s,char *t){ int len1=strlen(s),len2=strlen(t); int i=0,j=0; getnext(t); while(i<len1 && j<len2){ if(j==-1 || s[i]==t[j]){ i++;j++; }else j=next[j]; } if(i==len1) return j; return 0; } int main(){ //freopen("input.txt","r",stdin); while(~scanf("%s%s",s1,s2)){ int x=KMP(s1,s2); int y=KMP(s2,s1); if(x==y){ if(strcmp(s1,s2)<0) printf("%s%s\n",s1,s2+x); else printf("%s%s\n",s2,s1+x); }else if(x>y) printf("%s%s\n",s1,s2+x); else printf("%s%s\n",s2,s1+y); } return 0; }