[bzoj4755][Jsoi2016]扭动的回文串
来自FallDream的博客,未经允许,请勿转载,谢谢。
#include<iostream>
#include<cstdio>
#include<vector>
#define MN 200000
#define rint register int
#define getchar() (*S++)
char BB[<<],*S=BB;
using namespace std;
inline int read()
{
int x = ; char ch = getchar();
while(ch < '' || ch > '') ch = getchar();
while(ch >= '' && ch <= ''){x = x * + ch - '';ch = getchar();}
return x;
}
inline char Getchar()
{
char c;
do c=getchar(); while(c<'A'||c>'Z');
return c;
} int n,mx,pos,Lt[MN+],Rt[MN+],ans=;
unsigned int f[MN+],F[MN+],pw[MN+];
char A[MN+],B[MN+]; int Solve(int Lt,int Rt)
{
int l=,r=min(Lt,n-Rt+),mid,ans=;
while(l<=r)
{
mid=l+r>>;
unsigned int ha1,ha2;
ha1=f[Lt-mid+]-pw[mid]*f[Lt+];
ha2=F[Rt+mid-]-pw[mid]*F[Rt-];
if(ha1==ha2) ans=mid,l=mid+;
else r=mid-;
}
return ans;
} int main()
{
fread(BB,,<<,stdin);
n=read();pw[]=;
for(rint i=;i<=n;++i) A[i<<]=Getchar(),pw[i]=pw[i-]*;
for(rint i=;i<=n;++i) B[i<<]=Getchar();
for(rint i=;i<=n+;++i) A[i*-]=B[i*-]=']';
mx=,pos=;n=n*+;
for(rint i=n;i;--i) f[i]=f[i+]*+A[i]-'A'+;
for(rint i=;i<=n;++i) F[i]=F[i-]*+B[i]-'A'+;
for(rint i=;i<=n;++i)
{
if(i<=mx) Lt[i]=min(mx-i+,Lt[*pos-i]);
else Lt[i]=;
while(i-Lt[i]>=&&i+Lt[i]<=n&&A[i-Lt[i]]==A[i+Lt[i]]) ++Lt[i];
if(Lt[i]+i->mx) mx=Lt[i]+i-,pos=i;
if(i&) {if(Lt[i]>)ans=max(ans,Solve(i-Lt[i],i+Lt[i]-)+Lt[i]/*);}
else ans=max(ans,Solve(i-Lt[i],i+Lt[i]-)+(Lt[i]-)/*+);
ans=max(ans,(Lt[i]-(i%==))/*+(i%==));
}
mx=n+;pos=n+;
for(rint i=n;i;--i)
{
if(i>=mx) Rt[i]=min(i-mx+,Rt[*pos-i]);
else Rt[i]=;
while(i-Rt[i]>=&&i+Rt[i]<=n&&B[i-Rt[i]]==B[i+Rt[i]]) ++Rt[i];
if(i-Rt[i]+<mx) mx=i-Rt[i]+,pos=i;
if(i&){ if(Rt[i]>) ans=max(ans,Solve(i-Rt[i]+,i+Rt[i])+Rt[i]/*);}
else ans=max(ans,Solve(i-Rt[i]+,i+Rt[i])+(Rt[i]-)/*+);
ans=max(ans,(Rt[i]-(i%==))/*+(i%==));
}
for(rint x=;x<=n;++x)
if((!(x&))&&A[x]==B[x]) ans=max(ans,Solve(x-,x+)+);
printf("%d",ans);
return ;
}
[bzoj4755][Jsoi2016]扭动的回文串的更多相关文章
- BZOJ4755: [JSOI2016]扭动的回文串——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4755 JYY有两个长度均为N的字符串A和B. 一个“扭动字符串S(i,j,k)由A中的第i个字符到 ...
- BZOJ4755 JSOI2016扭动的回文串(二分答案+哈希)
显然答案应该是由单串以某位置为中心的极长回文串继续在另一个串里拓展得到的.枚举中间位置二分答案,哈希判断即可.注意考虑清楚怎么处理偶回文,比如像manacher一样加分隔符. #include< ...
- BZOJ4755 [JSOI2016]扭动的回文串 【后缀数组】【manacher】
题目分析: 我写了史上最丑的后缀数组,怎么办? 首先manacher一遍两个串,这样只用考虑第三问.用$作为间隔符拼接两个串,把第一个串翻转.枚举回文中心,取最长的回文串,对于剩下的部分利用LCP匹配 ...
- [BZOJ4755][JSOI2016]扭动的回文串(manacher+Hash)
前两种情况显然直接manacher,对于第三种,枚举回文中心,二分回文半径,哈希判断即可. #include<cstdio> #include<algorithm> #defi ...
- 【BZOJ4755】 [Jsoi2016]扭动的回文串
BZOJ4755 [Jsoi2016]扭动的回文串 Solution 考虑对于他给出的 A中的一个回文串: B中的一个回文串: 或者某一个回文的扭动字符串S(i,j,k) 这样子几个限制,我们1,2就 ...
- 【BZOJ4755】扭动的回文串(Manacher,哈希)
[BZOJ4755]扭动的回文串(Manacher,哈希) 题面 BZOJ 题解 不要真的以为看见了回文串就是\(PAM,Manacher\)一类就可以过. 这题显然不行啊. 我们主要考虑如何解决跨串 ...
- [BZOJ]4755: [Jsoi2016]扭动的回文串
Time Limit: 10 Sec Memory Limit: 512 MB Description JYY有两个长度均为N的字符串A和B. 一个"扭动字符串S(i,j,k)由A中的第i ...
- 【题解】Luogu P4324 [JSOI2016]扭动的回文串
原题传送门 这题实际挺水的 先对两个字符串分别跑马拉车 就能求出1.2类扭动回文串最大的长度 考虑第三类的扭动回文串\(S(i,j,k)\),一定可以表示为\(A(i,l)+A(l+1,j)+B(j, ...
- [JSOI2016]扭动的回文串
题目 非常板子了 看到求什么最长的回文,我们就想到枚举回文中心的方法 首先对于这个回文串只包含在一个串内的情况,我们随便一搞就可以了,大概\(Manacher\)一下就没有了 对于那种扭动的回文串,我 ...
随机推荐
- Codechef March Challenge 2014——The Street
The Street Problem Code: STREETTA https://www.codechef.com/problems/STREETTA Submit Tweet All submis ...
- DELL EqualLogic PS存储硬盘故障数据恢复成功案例分享
DELL EqualLogic PS4000采用虚拟ISCSI SAN阵列,为远程或分支办公室.部门和中小企业存储部署带来企业级功能.智能化.自动化和可靠性.以简化的管理.快速的部署及合理的价格满足了 ...
- vue中一个dom元素可以绑定多个事件?
其实这个问题有多个解决方法的 这里提出两点 第一种 第二种 现在dom上绑定一个 然后在你的methods中直接调用 如果要传参数 这时候千万别忘记 原创 如需转载注明出处 谢谢
- Ansible自动化运维工具-上
[Ansible特点] 1)Ansible与saltstack均是基于Python语言开发的 2)安装使用简单,基于不同插件和模块实现各种软件,平台,版本的管理以及支持虚拟容器多层级的部署 3)不需要 ...
- Python内置函数(12)——str
英文文档: class str(object='') class str(object=b'', encoding='utf-8', errors='strict') Return a string ...
- Python-面向对象(二)-Day7
1.字段 12.方法 43.属性 63.1.属性的基本使用 73.2.实例:对于主机列表 83.3.属性的两种定义方式 94.对于类的成员而言都有两种形式: 144.1.私有成员和公有成员的访问限制不 ...
- xftp上传文件失败,执行程序发现磁盘满了:No space left on device
参考链接 No space left on device 解决Linux系统磁盘空间满的办法http://www.cnblogs.com/aspirant/p/3604801.html如何解决linu ...
- html5shiv.js和respond.min.js的作用
html5shiv:解决ie9以下浏览器对html5新增标签的不识别,并导致CSS不起作用的问题. respond.min:让不支持css3 Media Query的浏览器包括IE6-IE8等其他浏览 ...
- 表单提交中的input、button、submit的区别
1.input[type=submit] 我们直接来看例子: 代码如下: <form> <input name="name"> <input type ...
- python 资产管理
python 资产管理 一.Agent 方式 1.这个方法的优点:使用简单,速度快,适合服务器较多场景使用,缺点:服务器比较占资源,性能会变低. 2.使用Agent的前提条件是客户端(服务器)特别多的 ...