HDU 4763 Theme Section extkmp
来源:互联网 发布:我的淘宝等级是什么 编辑:程序博客网 时间:2024/06/05 10:34
题目:
http://acm.hdu.edu.cn/showproblem.php?pid=4763
题意:
给定一个字符串,找到一个子串,使得字符串呈现出
思路:
首先求出
#include <bits/stdc++.h>using namespace std;const int N = 1000000 + 10;char ori[N];int Next[N];int a[N];void get_next(char *pat){ int len = strlen(pat); Next[0] = len; int k = 0; while(k + 1 < len && pat[k] == pat[k+1]) ++k; Next[1] = k; k = 1; for(int i = 2; pat[i]; i++) { if(i + Next[i-k] < k + Next[k]) Next[i] = Next[i-k]; else { int j = max(k + Next[k] - i, 0); while(i + j < len && pat[i+j] == pat[j]) ++j; Next[i] = j; k = i; } }}int main(){ int t; scanf("%d", &t); while(t--) { scanf("%s", ori); get_next(ori); int len = strlen(ori); int k = 0; for(int i = len - len/3; i < len; i++) if(i + Next[i] == len) a[++k] = Next[i]; int ans = 0; for(int i = 0; ori[i]; i++) { int l = 1, r = k, tmp = 0; while(l <= r) { int mid = (l + r) >> 1; if(a[mid] > Next[i]) l = mid + 1; else if(0+a[mid]-1 < i && i+a[mid]-1 < len-a[mid] && len-a[mid] + Next[len-a[mid]] == len) tmp = a[mid], r = mid - 1; else l = mid + 1; } ans = max(ans, tmp); } printf("%d\n", ans); } return 0;}
用
,这种写法很快,在这题没什么体现,大概是数据太水,在
#include <bits/stdc++.h>using namespace std;const int N = 1000000 + 10;char ori[N], pat[N];int Next[N];void get_next(char *pat){ int i = 0, j = -1; Next[0] = -1; while(pat[i]) { if(j == -1 || pat[i] == pat[j]) Next[++i] = ++j; else j = Next[j]; }}int kmp(char *ori, char *pat){ int i = 0, j = 0; while(ori[i]) { if(j == -1 || ori[i] == pat[j]) ++i, ++j; else j = Next[j]; if(j != -1 && !pat[j]) return true; } return false;}bool check(int k, int len){ if(k > len/3) return false; for(int i = 0; i < k; i++) pat[i] = ori[i]; pat[k] = '\0'; char ch ='\0'; swap(ch, ori[len-k+1]); bool ans = kmp(ori + k, pat); swap(ch, ori[len-k+1]); return ans;}int main(){ scanf("%s", ori); get_next(ori); int len = strlen(ori); int k = Next[len]; int ans = 0; while(true) { if(check(k, len)) { ans = k; break; } else { k = Next[k]; if(k <= 0) break; } } printf("%d\n", ans); return 0;}
阅读全文
0 0
- HDU 4763 Theme Section extkmp
- HDU 4763 Theme Section
- hdu 4763 Theme Section
- hdu 4763 Theme Section
- HDU-4763 Theme Section
- HDU 4763 Theme Section
- Hdu-4763 Theme Section
- hdu 4763 Theme Section
- hdu 4763 Theme Section
- HDU 4763Theme Section
- hdu 4763 Theme Section
- hdu 4763 Theme Section
- hdu 4763Theme Section
- KMP-hdu-4763-Theme Section
- hdu 4763 Theme Section (双哈希)
- hdu 4763 Theme Section(KMP)
- hdu 4763 Theme Section kmp
- HDU 4763 Theme Section(KMP)
- 【iOS】RxSwift官方Example1,2--加法,检验篇
- Logminer简介及应用
- NDK第一章--认识NDK及简单的输出hello world
- HDF5简介
- javaweb 导致乱码原因
- HDU 4763 Theme Section extkmp
- 二项分布期望与方差的证明
- 查看linux中某个端口(port)是否被占用
- HDU 2795 Billboard(线段树)
- 初来乍到,学习转载
- Java通过反射机制修改只读属性参数
- 暗时间
- Gradle系列第一讲-什么是Gradle? Gradle是做什么的?
- Android更新Ui的几种方法和见解