2017.9.20 回文串 思考记录
这个题官方解法是 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 回文串 思考记录相关推荐
- 2017.3.26 最长双回文串 思考记录
学一下manacher.. 主要思想就是利用回文的性质找对称点来往外扩 这个题还需要求双回文串..就统计一下 从一个点往右的最长回文串长度 和 从一个点往左的最长回文串长度 再枚举断点即可 码 ...
- leetcode 131. 分割回文串 思考分析
题目 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 思考 问题可以分为两个子问题:1.判断回文串2.分割数组 判断回文串 bool isPalin ...
- 2017.10.5 最短母串 思考记录
这个题n<=15,可以用10表示选取情况下的最优值 预处理两个串之间的连接关系,然后枚举状态转移 然而这个题还要输出方案,,而且还不让你开空间. 所以只能记录前继动态判断.. 所以十分难写难调 ...
- 2017.4.20 hanoi双塔问题 思考记录
题目中也提示了有递推关系.. 其实答案就是(2^n-1)*2 用高精循环算出来即可 码: #include<iostream> #include<cstdio> using n ...
- LeetCode解题记录(409)——最长回文串
LeetCode解题记录--最长回文串 题目描述 示例 题目理解 解题思路 题目描述 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比 ...
- bzoj 2565: 最长双回文串 manacher算法
2565: 最长双回文串 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem. ...
- [国家集训队]最长双回文串 manacher
---题面--- 题解: 首先有一个直观的想法,如果我们可以求出对于位置i的最长后缀回文串和最长前缀回文串,那么我们枚举分界点然后合并前缀和后缀不就可以得到答案了么? 所以我们的目标就是求出这两个数列 ...
- NYOJ 1023 还是回文(DP,花最少费用形成回文串)
1 /* 2 题意:给出一串字符(全部是小写字母),添加或删除一个字符,都会产生一定的花费. 3 那么,将字符串变成回文串的最小花费是多少呢? 4 5 思路:如果一个字符串增加一个字符 x可以形成一个 ...
- 怎么判断一个字符串的最长回文子串是否在头尾_LeetCode 5 迅速判断回文串的Manacher算法...
本文始发于个人公众号: TechFlow 题意 Given a string s, find the longest palindromic substring in s. You may assum ...
最新文章
- 结对编程--------四则运算 实验总结2
- mybatis报错Type interface xxx.Dao is not...
- Hibernate中使用Criteria查询及注解——(Emp.java)
- lodash 常用的方法总结(持续更新)
- 闲鱼无障碍是怎么在端侧实现的
- HTTPS详解SSL/TLS
- Git版本管理工具的使用方法
- 混音师的混音之道|处理母带和混音的差别?母带处理的真相(上)|MZD Studios
- 龙格现象python程序_基于切比雪夫多项式的函数插值逼近
- 基于html+css房地产销售系统设计与实现-计算机毕业设计源码+LW文档
- 《跟任何人都聊得来》读书笔记
- ceph 代码分析 读_Ceph代码分析
- 浏览器页面录制及转视频方案
- 蓝牙芯片解决方案市场规模
- wps怎么减少行间距,WPS的word怎么不能缩小行间距
- assigning the result of this type assertion to a variable could eliminate the followin assertion解决
- noi题库c语言 1.5答案,NOIP2004提高组复赛试题答案c语言版
- c语言中front是什么,front用法,关于front的用法
- WORDPRESS QQ扫码登录插件
- linemod算法小结
热门文章
- 随笔--四个月培训小结
- HTTP的基本原理----爬虫基础
- CLion开发GTKmm界面应用的Cmake配置文件
- WORD 表格后面的空白页删不掉?
- vb只显示两位小数_【名师课堂】苏教数学五年级上3.1小数的意义
- 微信小程序official-account组件的使用及样式设置
- c语言添加收支情况,C语言编写一个计算个人所得税的程序,要求输入收入金额,能够输...
- 数据逻辑讨论计算机,1绪论信息技术算法与程序福建教师招考.ppt
- java webservice 验证_SOAP header验证WebService接口的访问权限
- signature=14a3e4f784cf9004647ea52bac22e550,维族老年慢性阻塞性肺疾病患者合并肺动脉高压的临床研究...