P4287 [SHOI2011]双倍回文
文章目录
- ResultResultResult
- HyperlinkHyperlinkHyperlink
- DescriptionDescriptionDescription
- SolutionSolutionSolution
- CodeCodeCode
ResultResultResult
HyperlinkHyperlinkHyperlink
https://www.luogu.com.cn/problem/P4287
DescriptionDescriptionDescription
若一个回文串长度为4的倍数且从中间断开后的两个子串仍是回文串称这个串是双倍回文的。给定一个长度为nnn的串,求其最长双倍回文子串
数据范围:n≤5×105n\leq 5\times 10^5n≤5×105
SolutionSolutionSolution
跑马拉车时顺便判断前面是否能拓展过来即可
时间复杂度:O(n)O(n)O(n)
CodeCodeCode
#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
#define LL long long
#define N 5000010
using namespace std;char s[N],news[N];
int n,newn,p[N];
inline LL read()
{char c;LL d=1,f=0;while(c=getchar(),!isdigit(c)) if(c=='-') d=-1;f=(f<<3)+(f<<1)+c-48;while(c=getchar(),isdigit(c)) f=(f<<3)+(f<<1)+c-48;return d*f;
}
inline void Init()
{news[0]='~';news[1]='|';newn=2;for(register int i=0;i<n;i++) news[newn++]=s[i],news[newn++]='|';news[newn]=10;return;
}
inline int Manacher()
{int mid=1,mx=1,ans=0;for(register int i=1;i<newn;i++){if(i<mx) p[i]=min(mx-i,p[2*mid-i]);else p[i]=1;while(news[i-p[i]]==news[i+p[i]]) p[i]++;if(mx<i+p[i]){if(i&1) for(register int j=max(mx,i+4);j<i+p[i];j++) if(!(j-i&3)&&p[i-(j-i)/2]>(j-i)/2) ans=max(ans,j-i);mid=i;mx=i+p[i];}}return ans;
}
signed main()
{ n=read();scanf("%s",s);Init();printf("%d\n",Manacher());
}
P4287 [SHOI2011]双倍回文相关推荐
- 洛谷P4287 [SHOI2011]双倍回文 题解
洛谷P4287 [SHOI2011]双倍回文 题解 题目链接:P4287 [SHOI2011]双倍回文 题意: 记字符串 www 的倒置为 wRw^RwR .例如 (abcd)R=dcba(\tt{a ...
- [SHOI2011]双倍回文 manacher
题面: 洛谷:[SHOI2011]双倍回文' 题解: 首先有一个性质,本质不同的回文串最多O(n)个. 所以我们可以对于每个i,求出以这个i为结尾的最长回文串,然后以此作为长串,并判断把这个长串从中间 ...
- BZOJ2342 Shoi2011 双倍回文 【Manacher】
BZOJ2342 Shoi2011 双倍回文 Description Input 输入分为两行,第一行为一个整数,表示字符串的长度,第二行有个连续的小写的英文字符,表示字符串的内容. Output 输 ...
- BZOJ 2342 [Shoi2011]双倍回文(manacher+并查集)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2342 [题目大意] 记Wr为W串的倒置,求最长的形如WWrWWr的串的长度. [题解] ...
- [BZOJ2342] [Shoi2011]双倍回文(manacher)
传送门 manacher...... 先跑一边manacher是必须的 然后枚举双倍回文串的对称轴x 把这个双倍回文串分成4段,w wR w wR 发现,只有当 y <= x + p[x] / ...
- BZOJ2342[Shoi2011]双倍回文——回文自动机
题目描述 输入 输入分为两行,第一行为一个整数,表示字符串的长度,第二行有个连续的小写的英文字符,表示字符串的内容. 输出 输出文件只有一行,即:输入数据中字符串的最长双倍回文子串的长度,如果双倍回文 ...
- [Shoi2011]双倍回文
Description Input 输入分为两行,第一行为一个整数,表示字符串的长度,第二行有个连续的小写的英文字符,表示字符串的内容. Output 输出文件只有一行,即:输入数据中字符串的最长双倍 ...
- 【BZOJ-2342】双倍回文 Manacher + 并查集
2342: [Shoi2011]双倍回文 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1799 Solved: 671 [Submit][Sta ...
- BZOJ 2342: 【SHOI2011】 双倍回文
题目链接:双倍回文 回文自动机第二题.构出回文自动机,那么一个回文串是一个"双倍回文",当且仅当代表这个串的节点\(u\)顺着\(fail\)指针往上跳,可以找到一个节点\(x\) ...
最新文章
- 四、唱歌不如跳舞(上)
- python画并列柱状图-Python实现绘制双柱状图并显示数值功能示例
- 配置交换机etherchannel
- 前沿 | 全球最具影响力开源数据库峰会开幕在即 阿里云精彩议题先睹为快
- python 删除n天前文件_Linux 按时间批量删除文件命令(删除N天前文件)
- jQuery经典案例【倒计时】
- 计算机组成要素二:布尔运算:ALU算术运算器
- .net core实践系列之短信服务-Api的SDK的实现与测试
- java===Runtime类
- 11-基于dev的bug(还没想通)
- bzoj 2351: [BeiJing2011]Matrix(二维Hash)
- android 素材标签,Android Studio矢量素材资源导入错误 – 不支持标签
- 各种电子元器件介绍与电路基础作用
- 服务器系统宽带拔号,宽带拨号上网什么意思?宽带拨号上网的操作步骤
- 虚拟机远程连接USB SERVER
- 获知某一年的母亲节,父亲节和感恩节日期
- C/C++基础题029.DDD
- Codeforces Global Round 16 2021.9.13
- 百度蜘蛛爬行日志分析
- 【力扣周赛#324】6266. 使用质因数之和替换后可以取到的最小值+6267. 添加边使所有节点度数都为偶数+6268. 查询树中环的长度