这个题官方解法是 manacher+sa、

但pam诞生之后这个题就变成了模板题。。

事实证明,科技是第一解题力

网上的pam讲解感觉很迷啊,,核心思想一张图就搞定了:

黑色箭头就是指向以右端点为结尾的小一些的回文串

调到如果重的就++

没有的就新建,再画新建点的箭头

pam实现起来有一个很神的技巧:len[1]=-1;

这样正常匹配到1就是失配

num计算也是0;

由于有些串是后加的,所以cnt不一定准确,所以需要失配是它的cnt也要加上

这个题套路就和洛谷的SAM模板一样了,扫一遍出解

码:

#include<iostream>
#include<cstdio>
using namespace std;
#define N 600005
#include<cstring>
int wz,num[N],S[N],sp[N],ch[N][27],p,n,last,i;
char str[N];
long long len[N],cnt[N],ans;
int xin(int l)
{++p;len[p]=l;   return p;
}
int shipei(int o)
{while(S[wz-len[o]-1]!=S[wz])o=sp[o];return o;
}
void jia(int o)
{int qj=shipei(last);if(ch[qj][o]==0){int no=xin(len[qj]+2);sp[no]=ch[shipei(sp[qj])][o];ch[qj][o]=no;num[no]=num[sp[no]]+1;}
last=ch[qj][o];
cnt[ch[qj][o]]++;
}
int main()
{p=-1;xin(0);xin(1);len[1]=-1;sp[0]=1;S[0]=-1;
scanf("%s",str+1);
int lenth=strlen(str+1);
for(i=1;i<=lenth;i++)
S[i]=str[i]-'0';
for(wz=1;wz<=lenth;wz++)
jia(S[wz]);for(i=p;i>=2;i--){cnt[sp[i]]+=cnt[i];ans=max(ans,cnt[i]*len[i]);}printf("%lld",ans);
}

2017.9.20 回文串 思考记录相关推荐

  1. 2017.3.26 最长双回文串 思考记录

    学一下manacher.. 主要思想就是利用回文的性质找对称点来往外扩 这个题还需要求双回文串..就统计一下 从一个点往右的最长回文串长度   和   从一个点往左的最长回文串长度 再枚举断点即可 码 ...

  2. leetcode 131. 分割回文串 思考分析

    题目 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 思考 问题可以分为两个子问题:1.判断回文串2.分割数组 判断回文串 bool isPalin ...

  3. 2017.10.5 最短母串 思考记录

    这个题n<=15,可以用10表示选取情况下的最优值 预处理两个串之间的连接关系,然后枚举状态转移 然而这个题还要输出方案,,而且还不让你开空间. 所以只能记录前继动态判断.. 所以十分难写难调 ...

  4. 2017.4.20 hanoi双塔问题 思考记录

    题目中也提示了有递推关系.. 其实答案就是(2^n-1)*2 用高精循环算出来即可 码: #include<iostream> #include<cstdio> using n ...

  5. LeetCode解题记录(409)——最长回文串

    LeetCode解题记录--最长回文串 题目描述 示例 题目理解 解题思路 题目描述 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比 ...

  6. bzoj 2565: 最长双回文串 manacher算法

    2565: 最长双回文串 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem. ...

  7. [国家集训队]最长双回文串 manacher

    ---题面--- 题解: 首先有一个直观的想法,如果我们可以求出对于位置i的最长后缀回文串和最长前缀回文串,那么我们枚举分界点然后合并前缀和后缀不就可以得到答案了么? 所以我们的目标就是求出这两个数列 ...

  8. NYOJ 1023 还是回文(DP,花最少费用形成回文串)

    1 /* 2 题意:给出一串字符(全部是小写字母),添加或删除一个字符,都会产生一定的花费. 3 那么,将字符串变成回文串的最小花费是多少呢? 4 5 思路:如果一个字符串增加一个字符 x可以形成一个 ...

  9. 怎么判断一个字符串的最长回文子串是否在头尾_LeetCode 5 迅速判断回文串的Manacher算法...

    本文始发于个人公众号: TechFlow 题意 Given a string s, find the longest palindromic substring in s. You may assum ...

最新文章

  1. 结对编程--------四则运算 实验总结2
  2. mybatis报错Type interface xxx.Dao is not...
  3. Hibernate中使用Criteria查询及注解——(Emp.java)
  4. lodash 常用的方法总结(持续更新)
  5. 闲鱼无障碍是怎么在端侧实现的
  6. HTTPS详解SSL/TLS
  7. Git版本管理工具的使用方法
  8. 混音师的混音之道|处理母带和混音的差别?母带处理的真相(上)|MZD Studios
  9. 龙格现象python程序_基于切比雪夫多项式的函数插值逼近
  10. 基于html+css房地产销售系统设计与实现-计算机毕业设计源码+LW文档
  11. 《跟任何人都聊得来》读书笔记
  12. ceph 代码分析 读_Ceph代码分析
  13. 浏览器页面录制及转视频方案
  14. 蓝牙芯片解决方案市场规模
  15. wps怎么减少行间距,WPS的word怎么不能缩小行间距
  16. assigning the result of this type assertion to a variable could eliminate the followin assertion解决
  17. noi题库c语言 1.5答案,NOIP2004提高组复赛试题答案c语言版
  18. c语言中front是什么,front用法,关于front的用法
  19. WORDPRESS QQ扫码登录插件
  20. linemod算法小结

热门文章

  1. 随笔--四个月培训小结
  2. HTTP的基本原理----爬虫基础
  3. CLion开发GTKmm界面应用的Cmake配置文件
  4. WORD 表格后面的空白页删不掉?
  5. vb只显示两位小数_【名师课堂】苏教数学五年级上3.1小数的意义
  6. 微信小程序official-account组件的使用及样式设置
  7. c语言添加收支情况,C语言编写一个计算个人所得税的程序,要求输入收入金额,能够输...
  8. 数据逻辑讨论计算机,1绪论信息技术算法与程序福建教师招考.ppt
  9. java webservice 验证_SOAP header验证WebService接口的访问权限
  10. signature=14a3e4f784cf9004647ea52bac22e550,维族老年慢性阻塞性肺疾病患者合并肺动脉高压的临床研究...