经典题

manacher是一种很神奇的算法,

算是动态规划的一种,不过利用的信息非常有效

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 1e5 + ;
char S2[maxn*], str[maxn*];
int R[maxn*];
void Manacher(char* S){
int L = strlen(S);
for(int i = , j = ; i < *L; i += , j += ) S2[i] = '#', S2[j] = S[j/];
S2[*L] = '#';
int mx = -, id = -;
for(int i = ; i < *L; i++){
R[i] = mx-i >= ? min(R[*id-i], mx-i+) : ;
while(i+R[i] <= *L && S2[i+R[i]] == S2[i-R[i]]) R[i]++;
if(i+R[i]- > mx) mx = i+R[i]-, id = i;
}
} int main()
{
cin>>str;
Manacher(str);
int L = strlen(str), ans = ;
//for(int i = 0; i < 2*L; i++) cout<<R[i]<<" "; cout<<endl;
for(int i = ; i < *L; i += ) ans = max(ans, *(R[i]/-) + );
for(int i = ; i < *L; i += ) ans = max(ans, R[i]-);
cout<<ans<<endl;
return ;
}

最新文章

  1. log4net 记录MVC监控日志
  2. 1Z0-053 争议题目解析706
  3. iOS地图 -- 地理编码和反地理编码
  4. leetcode 186. Reverse Words in a String II 旋转字符数组 ---------- java
  5. Json的序列化与反序列化
  6. web基础
  7. W3C对DOM2.0定义的标准事件
  8. Storyboards
  9. DSP using MATLAB 示例Example3.22
  10. Java内存分配和内存管理
  11. 《javascript高级程序设计》 第25章 新兴的API
  12. 函数rec_get_nth_field_offs_old
  13. C语言字节对齐
  14. 【树形动态规划】【CTSC1997】选课 解题报告
  15. Date与Calendar
  16. WEB打印插件jatoolsPrinter
  17. Vue引入elementUI组件全过程
  18. 26_ArrayList_HashSet的比较及Hashcode分析
  19. Qt532.QString_填充字符
  20. Java 枚举(enum) 详解4种常见的用法

热门文章

  1. day 8 递归
  2. 4040 EZ系列之奖金 (拓扑)
  3. Zabbix学习之路(九)之低级自动发现以及MySQL多实例
  4. Azkaban系统的安装和分析。
  5. 解析build.gradle文件
  6. TPO-17 C1 Find materials for an opera paper
  7. asp.net mvc access数据库操作
  8. linux下搭建python机器学习环境
  9. C++ STL栈和队列
  10. sprint2 团队贡献分