KMP-hdu-1867 A + B for you again
2013-05-22 20:08
537 查看
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1867
题目意思:
给两个字符串,求相加后的长度最小的字符串,相加时第一个字符串的后缀如果和第二个字符串的前缀相同,可以消掉一个。
当最短长度相同时,以字母顺序小的输出。
解题思路:
注意两字符串相加可以交换,分两种情况来分析。
如果s1+s2 则构造s2*s1字符串,求出next数组即可。
代码:
http://acm.hdu.edu.cn/showproblem.php?pid=1867
题目意思:
给两个字符串,求相加后的长度最小的字符串,相加时第一个字符串的后缀如果和第二个字符串的前缀相同,可以消掉一个。
当最短长度相同时,以字母顺序小的输出。
解题思路:
注意两字符串相加可以交换,分两种情况来分析。
如果s1+s2 则构造s2*s1字符串,求出next数组即可。
代码:
#include<iostream> #include<cmath> #include<cstdio> #include<cstdlib> #include<string> #include<cstring> #include<algorithm> #include<vector> #include<map> #include<stack> #include<list> #include<queue> #define eps 1e-6 #define INF (1<<30) #define PI acos(-1.0) using namespace std; #define Maxn 110000 char save1[Maxn],save2[Maxn],a1[2*Maxn],a2[2*Maxn]; char save[2*Maxn]; int next[2*Maxn],n; void getnext() { int j=0; next[1]=0; for(int i=2;i<=n;i++) { while(j>0&&save[j+1]-save[i]) j=next[j]; if(save[j+1]==save[i]) j++; next[i]=j; } return ; } int main() { while(scanf("%s%s",save1,save2)!=EOF) { int ans1,ans2,len=0; save[1]='\0'; strcat(save+1,save1); strcat(save+1,"*"); strcat(save+1,save2); save[0]='K'; n=strlen(save)-1; //s1*s2 getnext(); ans1=next ; //printf("next:%d\n",ans1); a1[0]='\0'; strcat(a1,save2); strcat(a1,save1+ans1); save[1]='\0'; strcat(save,save2); strcat(save,"*"); strcat(save,save1); save[0]='K'; n=strlen(save)-1; //s2*s1 getnext(); ans2=next ; a2[0]='\0'; strcat(a2,save1); strcat(a2,save2+ans2); if(ans1>ans2) printf("%s\n",a1); else if(ans1<ans2) printf("%s\n",a2); else { if(strcmp(a1,a2)<0) printf("%s\n",a1); else printf("%s\n",a2); } } return 0; }
相关文章推荐
- hdu 1867 A + B for you again (KMP)
- HDU 1867--A + B for you again【KMP】
- KMP——HDU 1867 A + B for you again
- HDU 1867 A + B for you again(KMP)
- hdu 1867 A + B for you again (kmp扩展)
- HDU(1867)A + B for you again (KMP)
- KMP——HDU 1867 A + B for you again
- HDU 1867 A + B for you again——kmp
- KMP——HDU 1867 A + B for you again
- hdu 1867 A + B for you again (kmp)
- hdu 1867 A + B for you again kmp
- HDU 1867 A + B for you again(KMP:后缀与前缀)
- hdu -- 1867 A + B for you again (KMP)
- HDU 1867 A + B for you again 字符串拼接 kmp
- KMP——HDU 1867 A + B for you again
- hdu 1867 A + B for you again kmp
- HDU 1867 A + B for you again 数据结构+KMP简单应用
- KMP——HDU 1867 A + B for you again
- hdu 1867 A + B for you again kmp
- hdu 1867 A + B for you again(KMP)