正解: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. CentOS 7.4安装nodejs & nginx & pm2

    一.安装nodejs1.查看操作系统信息 uname -a cat /etc/centos-release 2.安装wget yum install wget -y3.安装nodejs 1.下载 wg ...

  2. Nginx的location匹配规则

    一 Nginx的location语法 location [=|~|~*|^~] /uri/ { … } =         严格匹配.如果请求匹配这个location,那么将停止搜索并立即处理此请求 ...

  3. [转]:Delphi XE中泛型数组的使用范例

    Delphi XE中泛型数组的使用范例,下面的范例简单的使用了泛型字符串数组,如用 TArray 代替 array of Word, 还可以使用 TArray 类提供的算法(就是少了点). uses ...

  4. 2.4G还是5G?带你选择最正确的路由器

    智能设备井喷的时代,无线路由器成为家庭中最重要的电器设备.稳定性.连接速度.信号强弱都是无线路由使用体验的重要组成部分.究竟如何选购与配置路由器才能得到最好的用户体验呢? 当你在选购无线路由器的时候是 ...

  5. httpie的使用

    安装 brew install httpie 使用 模拟提交表单 http -f POST yhz.me username=nate 显示详细的请求 http -v yhz.me 只显示Header ...

  6. AI人工智能顶级实战工程师 课程大纲

    课程名称    内容    阶段一.人工智能基础 — 高等数学必知必会     1.数据分析    "a. 常数eb. 导数c. 梯度d. Taylore. gini系数f. 信息熵与组合数 ...

  7. (原)kenel开机logo的制作

    今天项目需要,需要制作一个kernel的开机logo,所以在rk3288的平台上进行测试一番. 第一步:配置kernel:选上CONFIG_LOGO_LINUX_CLUT224选项 make menu ...

  8. (原)关于udp的socket发送数据耗时的问题探讨

    转载请注明出处:http://www.cnblogs.com/lihaiping/p/6811791.html 本学习笔记,仅用于问题探讨,如有不同,可以讨论. 最近在看流媒体分发服务器的相关代码,其 ...

  9. Thrift关键字

    在编译thrift文件的时候发现报了如下的错误 Cannot use reserved language keyword: "class" 后来查了一下,发现class是thrif ...

  10. BAT面试上机题从3亿个ip中找出访问次数最多的IP详解

    我们面临的问题有以下两点:1)数据量太大,无法在短时间内解决:2)内存不够,没办法装下那么多的数据.而对应的办法其实也就是分成1)针对时间,合适的算法+合适的数据结构来提高处理效率:2)针对空间,就是 ...