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; }
相关文章推荐
- HDU1867_A + B for you again
- 【KMP】hdu1867(A + B for you again) 杭电java a题真坑
- hdu1867---A + B for you again
- 【KMP】 hdu1867 A + B for you again
- hdu1867 A + B for you again
- HDU1867 - A + B for you again(KMP)
- hdu1867 A + B for you again KMP
- HDU1867:A + B for you again
- 【KMP】hdu1867(A + B for you again) 杭电java a题真坑
- 【hdu1867】A + B for you again——KMP
- HDU1867:A + B for you again(KMP)
- hdu1867 A + B for you again(kmp)
- HDU1867:A + B for you again【kmp】
- hdu 1867(A + B for you again) KMP的应用 /hdu 2594(Simpsons’ Hidden Talents) KMP
- KMP——HDU 1867 A + B for you again
- HDU 1867 A + B for you again KMP解决问题的方法
- Hdu-1867 A + B for you again
- Nginx+Tomcat7:The page you are looking for is temporarily unavailable.Please try again later.
- HDU 1867 A + B for you again (KMP应用)
- KMP——HDU 1867 A + B for you again