P4287-[SHOI2011]双倍回文【PAM】

正题

题目链接:https://www.luogu.com.cn/problem/P4287


题目大意

长度为nnn的字符串。定义wRw^RwR表示字符串www的翻转。

一个双倍回文可以表示为wwRwwRww^Rww^RwwRwwR且这是个回文串。

求最长的子串是双倍回文。


解题思路

我们在构建PAMPAMPAM的时候维护一个halfhalfhalf表示该节点表示的回文串中一个长度小于该串长度的一半的一个最长的回文后缀。

维护的时候我们显然不能一个一个顺着failfailfail往上跳,我们可以从其父节点的halfhalfhalf开始跳,这样的时间复杂度就有保证。


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=2e6+10;
int n,len[N],fail[N],next[N][26],half[N],cnt,ans;
char s[N];
int get_fail(int x,int n){for(;s[n-len[x]-1]!=s[n];x=fail[x]);return x;
}
void Make_PAM(){s[0]=26;len[1]=-1;fail[0]=cnt=1;int last=0;for(int i=1;i<=n;i++){int val=s[i]-'a';int x=get_fail(last,i);if(!next[x][val]){len[++cnt]=len[x]+2;int y=get_fail(fail[x],i);fail[cnt]=next[y][val];if(len[cnt]<=2)half[cnt]=fail[cnt];else{int z=half[x];while(s[i-len[z]-1]!=s[i]||(len[z]+2)*2>len[cnt])z=fail[z];half[cnt]=next[z][val];}next[x][val]=cnt;}last=next[x][val];}return;
}
int main()
{scanf("%d%s",&n,s+1);Make_PAM();for(int i=1;i<=cnt;i++)if(len[half[i]]*2==len[i]&&!(len[half[i]]&1))ans=max(ans,len[i]);printf("%d",ans);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321544.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2020-09-18

1.处理调用子组件方法时&#xff0c;报错undefined问题 2.var 、const 、let区别 3. curl -X GET --header "Accept: */*" "访问地址" 4.mysql中的日期格式化 5. ant-design-vue-jeecg

低价购买(洛谷 1108)

低价购买&#xff08;洛谷 1108&#xff09; 题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则。要想被认为是伟大的投资者&#xff0c;你必须遵循以下的问题建议:“低价购买&#xff1b;再低价购买”。每次你购买一支股票,你必须用低于你上次购买它的价格购…

.NET Core/.NET之Stream简介

之前写了一篇C#装饰模式的文章用.NET Core实现装饰模式和.NET Core的Stream简介 提到了.NET Core的Stream, 所以这里尽量把Stream介绍全点. (都是书上的内容).NET Core/.NET的Streams首先需要知道, System.IO命名空间是低级I/O功能的大本营.Stream的结构.NET Core里面的Stream主…

P4762-[CERC2014]Virus synthesis【PAM,dp】

正题 题目链接:https://www.luogu.com.cn/problem/P4762 题目大意 长度为nnn的目标串&#xff0c;开始一个空串&#xff0c;可以执行以下操作 在头或者尾加一个字符复制一个该串的逆串放在后面 求最少操作次数。 解题思路 我们可以知道答案肯定是一个回文串然后剩下的暴力…

I - Trade Gym - 100212I 网络流

网络流好题 给出A、B两个点集&#xff0c;A、B之间有边相连&#xff0c;而A和B的内部均无边相连。 题目要求求出最多删除A、B之间的多少边&#xff0c;才能使得A中点的度数至少都为2&#xff0c;B中点的度数也至少都为2。 先求出每个点的度数&#xff0c;从每个点v出发&…

1、Spring简介

1、Spring是什么&#xff1f; Spring是一套用于开发J2EE应用程序的轻量级框架&#xff0c;其两大核心是IOC和AOP&#xff0c;也就是提供一个bean统一管理容器&#xff0c;提供面向切面编程的基础。 2、为什么要用Spring&#xff1f; 1&#xff09;使用Spring肯定是为了简化开…

【深搜】骑士游历(ssl 1277)

骑士游历 Description 如下图所示有m*n(n,m<15)一个棋盘&#xff0c;在棋盘左下角的A&#xff08;1,1&#xff09;点&#xff0c;有一个中国象棋〈马〉&#xff0c;并约定马走的规则&#xff1a; ①走日字&#xff1b;②只能向右走。 Sample Input &#xff19; &…

P6015-[CSGRound3]游戏【树状数组】

正题 题目链接:https://www.luogu.com.cn/problem/P6015?contestId25945 题目大意 nnn张牌&#xff0c;玩家111从顶拿若干张&#xff0c;之后玩家222拿若干张。 若牌的和大于KKK那么分数为0否则为牌的和。 求KKK为多少时玩家111必胜。 解题思路 我们枚举玩家111拿多少张&a…

修复迁移后Net Standard项目中的错误

接上一章&#xff0c;项目编译结果如下&#xff1a;解决依赖dll引用在Net Framework项目的引用如下&#xff1a;各引用和作用&#xff1a;log4net(1.10.0.0) 用于写框架日志Castle.DynamicProxy(1.1.5.1) 用于代理类生成Micosoft.Practice.EnterpiseLibrary 微软企业库&#xf…

【深搜】骑士游历(二)

骑士游历&#xff08;二&#xff09; 问题描述&#xff1a;设有一个nn的棋盘&#xff08;n≤10&#xff09;&#xff0c;在棋盘上的任意一点A(x,y)有一中国象棋<马>,<马>走的规则同前&#xff0c;但取消<马>只能向右走的条件。试找出一条路径&#xff0c;使…

P3449-[POI2006]PAL-Palindromes【结论题,字符串hash】

正题 题目链接:https://www.luogu.com.cn/problem/P3449 题目大意 nnn个回文串&#xff0c;求有多少对回文串有序拼接可以形成一个新的回文串。 解题思路 结论:当两个回文串的最短循环节相同时两个拼接起来就是一个新的回文串。 这里感性证明一下&#xff1a; 若两个回文串…

迁移Net项目为Net Core\Standard项目

背景&#xff1a;我们公司内部有自己ORM开发框架&#xff0c;最新因为需要将系统迁移到国产服务器上&#xff0c;所以首先需要将最基础的ORM框架改造可以运行在国产服务器上。对于我们Net来说&#xff0c;优选Net Core。在迁移的过程中&#xff0c;将一些经验和坑记录下来&…

2-sat模板- 输出可行解

自己写的代码 using namespace std; const int maxn 1e6; int head[maxn]; int DFN[maxn],LOW[maxn],stk[maxn],visit[maxn],belong[maxn]; vector<int> scc[maxn]; int tot,idx,cnt,sccnum; int n,color[maxn],degree[maxn],pos[maxn]; struct Es{ int v; int next; in…

读从电子到产品

1、用户的量不重要&#xff0c;质更重要&#xff0c;要让用户真正跟你的产品产生很强大的关系&#xff0c;要看解决问是不是够好、够快、够准&#xff0c;在解决问题的时候&#xff0c;要保证产品真正能满足用户的需求。 2、你认为的问题&#xff0c;别人未必觉得是问题&#…

迁移后的Net Standard版本的类库测试和多平台项目实测

按照第一步的方法&#xff0c;添加一个Net Core的MSTest项目&#xff0c;然后将原来的测试项目下的代码迁移到新测试 项目中&#xff0c;然后引用新的Beyondbit.Framework Core类库。然后运行单元测试项目和集成测试项目即可。测试当中单元测试下项目没有问题&#xff0c;一遍就…

【深搜】01串

01串 Description 用n个0和n个1排成一个2n位的二进制数,要求从最高位起到任意一位,0的个数不能少于1的个数。编程求出所有符合条件的2n位二进制数。 如n&#xff13;时&#xff0c;符合条件的共有5个&#xff1a; &#xff10;&#xff10;&#xff10;&#xff11;&#x…

poj3648 Wedding 2-sat

题目链接&#xff1a; 题目 建图&#xff1a; 1.新娘向新郎连边&#xff0c;表示选取的时候选取新娘对面的。 2. 有奸情的人比如是 xh yh那么连边(x,yn)以及(y,xn) 如果是xh yw 那么连边(x,y) 以及 (yn,x) 如果是xw yh 那么连边(xn,yn)以及(y,x) 如果是xw yw那么连边(x…

P3573-[POI2014]RAJ-Rally【拓扑排序,二分+树状数组】

正题 题目链接:https://www.luogu.com.cn/problem/P3573 题目大意 nnn个点mmm条边的DAGDAGDAG&#xff0c;删掉一个点使得最长路最短。 解题思路 先跑一遍拓扑排序 dsids_idsi​表示以iii结尾的最长路&#xff0c;dtidt_idti​表示以iii开头的最长路&#xff0c;用拓扑序dp可…

读上瘾-让用户养成习惯

1、凡是成功的创新都有一个共性&#xff1a;能够解决问题&#xff0c;看似明确&#xff0c;实则复杂&#xff0c;因为人们总是对新产品应该解决何种问题各执一词。 3、产品不只是满足功能&#xff0c;还要反映人性。好的产品是一件作品&#xff0c;好的技术几近于艺术&#xf…

.Net Core小技巧 - 使用Swagger上传文件

前言随着前后端分离开发模式的普及&#xff0c;后端人员更多是编写服务端API接口。调用接口实现文件上传是一个常见的功能&#xff0c;同时也需要一个选择文件上传的界面&#xff0c;可以编写前端界面上传&#xff0c;可以使用Postman、curl来模拟上传请求。上述的方式多多少少…