HDU 1867 A + B for you again——kmp
来源:互联网 发布:linux top 某个进程 编辑:程序博客网 时间:2024/06/05 14:18
注意kmp函数中i==lens时才能返回j,否则返回0,因为a的后缀要严格等于b的前缀(kmp比较的是a的后缀和b而不是a的子串和b)
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 1e5 + 10;char s[maxn], p[maxn], ans1[maxn], ans2[maxn];int Next[maxn];void makeNext(const char *p, int lenp) { int pos = 0, len = 0; Next[pos] = len; for (pos = 1; pos < lenp; pos++) { while (len && p[pos] != p[len]) len = Next[len - 1]; if (p[pos] == p[len]) len++; Next[pos] = len; }}int kmp(const char *s, const char *p, int lens, int lenp) { makeNext(p, lenp); int i, j; for (i = 0, j = 0; i < lens && j < lenp; i++) { while (j && s[i] != p[j]) j = Next[j - 1]; if (s[i] == p[j]) j++; } if (i == lens) return j; return 0;}int main() { while (~scanf("%s %s", s, p)) { int lens = strlen(s), lenp = strlen(p); int temp1 = kmp(s, p, lens, lenp), temp2 = kmp(p, s, lenp, lens); strcpy(ans1, s); strcpy(ans1 + lens, p + temp1); strcpy(ans2, p); strcpy(ans2 + lenp, s + temp2); if (temp1 > temp2) { printf("%s\n", ans1); } else if (temp1 < temp2) { printf("%s\n", ans2); } else { printf("%s\n", strcmp(ans1, ans2) >= 0 ? ans2 : ans1); } } return 0;}
阅读全文
1 0
- 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
- hdu 1867 KMP 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
- 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应用)
- struts环境搭建
- spring3.2 maven项目 从eclipse oxygen 迁移到 intellij idea 2017
- ie8兼容indexOf
- C语言入门第八篇,if语句
- HDU 6154
- HDU 1867 A + B for you again——kmp
- FreeSWITCH源码分析之主函数main()
- mysql性能分析之explain的用法
- LCD显示文字的函数-ARM体系-2440
- unity读取本地硬盘照片
- POJ
- android 歌曲名称旋转 框架
- 第七章 图(最短路径之dijkstra、 bellman-ford、floyd算法)
- nefu118 n!后面有多少个0(数学)