hdu 3068 manacher算法
来源:互联网 发布:网络解锁nck 编辑:程序博客网 时间:2024/05/01 07:18
manacher算法可以在O(n)的时间里找出最长回文子串。
具体的manacher算法可以看这里:manacher算法
/************************************************************************* > File Name: 3068.cpp > Author: gwq > Mail: gwq5210@qq.com > Created Time: 2015年07月26日 星期日 19时24分55秒 ************************************************************************/#include <cmath>#include <ctime>#include <cctype>#include <climits>#include <cstdio>#include <cstdlib>#include <cstring>#include <map>#include <set>#include <queue>#include <stack>#include <string>#include <vector>#include <sstream>#include <iostream>#include <algorithm>#define INF (INT_MAX / 10)#define clr(arr, val) memset(arr, val, sizeof(arr))#define pb push_back#define sz(a) ((int)(a).size())using namespace std;typedef set<int> si;typedef vector<int> vi;typedef map<int, int> mii;typedef pair<int, int> pii;typedef long long ll;const double esp = 1e-5;#define N 221000int p[N];char str[N], tmp[N];#define Min(a, b) (((a) < (b)) ? (a) : (b))int manacher(char str[], int len){ int id = 0; int mx = 0; clr(p, 0); for (int i = 1; i < len; ++i) { p[i] = mx > i ? min(p[2 * id - i], mx - i) : 1; while (str[i - p[i]] == str[i + p[i]]) { ++p[i]; } if (p[i] + i > mx) { id = i; mx = p[i] + i; } } int res = 0; for (int i = 0; i < len; ++i) { res = max(p[i], res); } return res - 1;}int main(int argc, char *argv[]){ while (scanf("%s", tmp) != EOF) { int len = 1; str[0] = '$'; for (int i = 0; tmp[i]; ++i) { str[len++] = '#'; str[len++] = tmp[i]; } str[len++] = '#'; str[len] = '\0'; printf("%d\n", manacher(str, len)); } return 0;}
0 0
- hdu 3068 manacher算法
- hdu-3068 Manacher算法模板
- Hdu 3068 最长回文 (manacher算法)
- hdu 3068 最长回文 (manacher算法)
- HDU 3068 最长回文(Manacher 算法)
- HDU-3068-最长回文 (Manacher算法)
- hdu 3068 最长回文(manacher算法)
- HDU 3068 最长回文 Manacher算法
- hdu 3068 最长回文 manacher算法
- hdu 3068 最长回文(manacher算法)
- Hdu 3068 最长回文 Manacher 算法
- hdu 3068 最长回文 (Manacher算法)
- HDU 3068 最长回文 (Manacher算法)
- hdu-3068 最长回文 【Manacher算法】
- Hdu 3068 最长回文(manacher算法)
- HDU 3068 最长回文(manacher算法)
- HDU 3068 最长回文 (manacher算法)
- HDU 3068 manacher回文数算法
- SyntaxError: Non-ASCII character Python、Unicode和中文
- 【计蒜客系列】挑战难题22:排序后的数组删除重复数字
- 希尔排序与堆排序(Java版)
- 【数据结构】3、模拟银行窗口排队叫号系统——C++
- 文本文件BASE-64编码解码
- hdu 3068 manacher算法
- [Python]psutil模块:用于获得处理器、系统和进程相关信息
- 安卓相对布局
- 解决VS2012【加载......符号缓慢】的问题
- PackageInstallerActivity 分析
- 大数的加法与乘法
- ubuntu安装总是提示"正在探测文件系统"
- css3动画变换
- 通过SkinResource实现的应用皮肤动态识别切换