正解:manacher+哈希

解题报告:

传送门

要不要先解释下题意,,,我开始看了半天来着QAQ

大概就,要求一个最长的回文串

这个回文串有两种构成可能

一种是单从一个串中拿出来的连续一段

另一种是两个串各拿出连续一段拼起来,其中这两段需要满足第一段的右端点坐标=第二段的左端点坐标

欧克然后看题趴QwQ

首先但从一个串中拿就直接跑个manacher就好

然后问题就在这个从两个串中各拿出一段

首先如果这是个回文串,显然它一定是有一段的一侧是本来就有的回文串,然后另一侧和另一个串构成回文串这样子的QwQ

(umm可能那个本来就有的回文串是空的我不管特殊情况但也差不多来着QwQ

然后仔细思考一下可以发现显然这段本来就有的回文串一定是越长越好的,懒得证了显然不会更劣的QwQ

所以就可以直接枚举每个回文串,然后求一下它的两侧能拓展多少就好

然后这个求,首先显然是有可二分性的,所以就二分+哈希判断下就好

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define gc getchar()
#define ri register int
#define rb register bool
#define rc register char
#define ll unsigned long long
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i) const int N=3e5+,bas=;
int n,str_cnt,f[][N],as;
ll poww[N],hsh[N][];
char a[N],b[N],c[N]; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch<'' || ch>''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il void manacher(rc *s,ri *g)
{
s[]='$';ri id=,mx=;
rp(i,,n){g[i]=mx>i?min(g[*id-i],mx-i):;while(s[i-g[i]-]==s[i+g[i]+])++g[i];if(g[i]+i>mx)mx=g[i]+i,id=i;}
}
il ll check(ri gdgs,ri l,ri r)
{
if(gdgs)return hsh[l][]-1ll*hsh[r+][]*poww[r-l+];
return hsh[r][]-1ll*hsh[l-][]*poww[r-l+];
}
il int cal(ri l,ri r)
{
ri as_l=,as_r=min(l,n-r+);
while(as_l<as_r)
{
ri mid=(as_l+as_r)>>;
if(check(,l-(mid+)+,l)==check(,r,r+(mid+)-))as_l=mid+;else as_r=mid;
}
return as_l;
} int main()
{
freopen("4324.in","r",stdin);freopen("4324.out","w",stdout);
n=read();scanf("%s%s",a+,b+);
poww[]=;
rp(i,,n)poww[i]=poww[i-]*bas;
rp(i,,n)hsh[i][]=hsh[i-][]*bas+a[i];
my(i,n,)hsh[i][]=hsh[i+][]*bas+b[i];
rp(i,,n)c[i]=a[i];str_cnt=;rp(i,,n)a[++str_cnt]='*',a[++str_cnt]=c[i];a[++str_cnt]='*';
rp(i,,n)c[i]=b[i];str_cnt=;rp(i,,n)b[++str_cnt]='*',b[++str_cnt]=c[i];b[++str_cnt]='*';
n=(n<<)|;manacher(a,f[]);manacher(b,f[]);
rp(i,,n){ri l=(i-f[][i]+)/,r=(i+f[][i])/;as=max(as,f[][i]+(cal(l-,r)<<));}
rp(i,,n){ri l=(i-f[][i]+)/,r=(i+f[][i])/;as=max(as,f[][i]+(cal(l,r+)<<));}
printf("%d\n",as);
return ;
}

洛谷P4324 扭动的回文串 [JSOI2016] manacher+哈希的更多相关文章

  1. 【BZOJ4755】扭动的回文串(Manacher,哈希)

    [BZOJ4755]扭动的回文串(Manacher,哈希) 题面 BZOJ 题解 不要真的以为看见了回文串就是\(PAM,Manacher\)一类就可以过. 这题显然不行啊. 我们主要考虑如何解决跨串 ...

  2. 【题解】Luogu P4324 [JSOI2016]扭动的回文串

    原题传送门 这题实际挺水的 先对两个字符串分别跑马拉车 就能求出1.2类扭动回文串最大的长度 考虑第三类的扭动回文串\(S(i,j,k)\),一定可以表示为\(A(i,l)+A(l+1,j)+B(j, ...

  3. [BZOJ]4755: [Jsoi2016]扭动的回文串

    Time Limit: 10 Sec  Memory Limit: 512 MB Description JYY有两个长度均为N的字符串A和B. 一个"扭动字符串S(i,j,k)由A中的第i ...

  4. [bzoj4755][Jsoi2016]扭动的回文串

    来自FallDream的博客,未经允许,请勿转载,谢谢. JYY有两个长度均为N的字符串A和B. 一个“扭动字符串S(i,j,k)由A中的第i个字符到第j个字符组成的子串与B中的第j个字符到第k个字符 ...

  5. 【BZOJ4755】 [Jsoi2016]扭动的回文串

    BZOJ4755 [Jsoi2016]扭动的回文串 Solution 考虑对于他给出的 A中的一个回文串: B中的一个回文串: 或者某一个回文的扭动字符串S(i,j,k) 这样子几个限制,我们1,2就 ...

  6. [JSOI2016]扭动的回文串

    题目 非常板子了 看到求什么最长的回文,我们就想到枚举回文中心的方法 首先对于这个回文串只包含在一个串内的情况,我们随便一搞就可以了,大概\(Manacher\)一下就没有了 对于那种扭动的回文串,我 ...

  7. BZOJ4755: [JSOI2016]扭动的回文串——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4755 JYY有两个长度均为N的字符串A和B. 一个“扭动字符串S(i,j,k)由A中的第i个字符到 ...

  8. 非确定性有穷状态决策自动机练习题Vol.1 A.扭动的回文串

    非确定性有穷状态决策自动机练习题Vol.1 A.扭动的回文串 题目描述 \(JYY\)有两个长度均为\(N\)的字符串\(A\)和\(B\). 一个"扭动字符串\(S(i,j,k)\)由\( ...

  9. P4324 [JSOI2016]扭动的回文串

    传送门 对\(A\).\(B\)串各跑一遍\(manacher\),求出第\(1\).\(2\)类扭动回文串的最大长度. 考虑第三类的扭动回文串\(S(i,j,k)\),一定可以表示为\(A(i,l) ...

随机推荐

  1. IoC之AutoFac(二)——解析服务

    阅读目录 一 Resolve方法 二 TryResolve和ResolveOptional方法 三 解析服务时传参 3.1 可用参数类型 3.2 带反射组件的参数 3.3 具有Lambda表达式组件的 ...

  2. 模拟真实点击click,专门对付clickoutside

    var evmousedown = document.createEvent('HTMLEvents'); // evmousedown.clientX = 88 // evmousedown.cli ...

  3. springboot 项目中读取资源文件内容 如图片、文档文件

    1 问题描述:在 springboot 项目中有时候会需要读取一些资源文件,例如 office的 docx 文档或者 png.jpg的图片.在多模块项目中资源文件需要放到启动项目的 Resources ...

  4. eclipse工具中使用Data Source Explorer连接数据库(MySQL)

    1.进入Eclipse工具,打开Data Source Explorer.Window==>Show View==>Data Source Explorer(注:如果找不到请选择Other ...

  5. 减少网站跳转时间,增强网站数据安全——HSTS 详解

    近年来随着 Google.Apple.百度等公司不断推动 HTTPS 普及,全网 HTTPS 已是大势所趋.目前多数网站都已经支持 HTTPS 访问,但是在由 HTTP 转向 HTTPS 路程中,不少 ...

  6. GCC:/usr/lib/libstdc++.so.6: version GLIBCXX_3.4.15 not found

    源码编译升级安装了gcc后,编译程序或运行其它程序时,有时会出现类似/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found的问题.这 ...

  7. bootstrapTable treegrid的使用

    最近打算自己弄一个后台,在整顿树形插件的时候,遇到问题,bootstrapTable treegrid最开始是怎么都显示不了树形,然后是数据出不来, 现在来记录下. 问题1:最开始怎么都显示不出来的问 ...

  8. Guava Cache用法介绍<转>

    Guava Cache是在内存中缓存数据,相比较于数据库或redis存储,访问内存中的数据会更加高效.Guava官网介绍,下面的这几种情况可以考虑使用Guava Cache: 愿意消耗一些内存空间来提 ...

  9. java改单个插入为批量插入

    单条insert into table value() 13W数据需要执行7小时 变成inert into table value(),(),(),(),() inert into table val ...

  10. Netty HTTP 服务端入门开发

    一. HTTP 简介 HTTP(超文本传输协议) 协议是建立在 TCP 传输协议之上的应用层协议,它的发展是万维网协会和 Internet 工作小组和 IETF 合作的结果. HTTP 是一个属于应用 ...