洛谷P4324 扭动的回文串 [JSOI2016] manacher+哈希
正解: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+哈希的更多相关文章
- 【BZOJ4755】扭动的回文串(Manacher,哈希)
[BZOJ4755]扭动的回文串(Manacher,哈希) 题面 BZOJ 题解 不要真的以为看见了回文串就是\(PAM,Manacher\)一类就可以过. 这题显然不行啊. 我们主要考虑如何解决跨串 ...
- 【题解】Luogu P4324 [JSOI2016]扭动的回文串
原题传送门 这题实际挺水的 先对两个字符串分别跑马拉车 就能求出1.2类扭动回文串最大的长度 考虑第三类的扭动回文串\(S(i,j,k)\),一定可以表示为\(A(i,l)+A(l+1,j)+B(j, ...
- [BZOJ]4755: [Jsoi2016]扭动的回文串
Time Limit: 10 Sec Memory Limit: 512 MB Description JYY有两个长度均为N的字符串A和B. 一个"扭动字符串S(i,j,k)由A中的第i ...
- [bzoj4755][Jsoi2016]扭动的回文串
来自FallDream的博客,未经允许,请勿转载,谢谢. JYY有两个长度均为N的字符串A和B. 一个“扭动字符串S(i,j,k)由A中的第i个字符到第j个字符组成的子串与B中的第j个字符到第k个字符 ...
- 【BZOJ4755】 [Jsoi2016]扭动的回文串
BZOJ4755 [Jsoi2016]扭动的回文串 Solution 考虑对于他给出的 A中的一个回文串: B中的一个回文串: 或者某一个回文的扭动字符串S(i,j,k) 这样子几个限制,我们1,2就 ...
- [JSOI2016]扭动的回文串
题目 非常板子了 看到求什么最长的回文,我们就想到枚举回文中心的方法 首先对于这个回文串只包含在一个串内的情况,我们随便一搞就可以了,大概\(Manacher\)一下就没有了 对于那种扭动的回文串,我 ...
- BZOJ4755: [JSOI2016]扭动的回文串——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4755 JYY有两个长度均为N的字符串A和B. 一个“扭动字符串S(i,j,k)由A中的第i个字符到 ...
- 非确定性有穷状态决策自动机练习题Vol.1 A.扭动的回文串
非确定性有穷状态决策自动机练习题Vol.1 A.扭动的回文串 题目描述 \(JYY\)有两个长度均为\(N\)的字符串\(A\)和\(B\). 一个"扭动字符串\(S(i,j,k)\)由\( ...
- P4324 [JSOI2016]扭动的回文串
传送门 对\(A\).\(B\)串各跑一遍\(manacher\),求出第\(1\).\(2\)类扭动回文串的最大长度. 考虑第三类的扭动回文串\(S(i,j,k)\),一定可以表示为\(A(i,l) ...
随机推荐
- Android 手机版 ssr
看上去比windows客户端多了很多选项,但实际上只需要设置这五个: 链接:https://pan.baidu.com/s/1PKL0ViJJRJw9zkG8AlvEdQ 提取码:p175 操作步骤: ...
- CZT变换(chirp z-transform)
作者:桂. 时间:2018-05-20 12:04:24 链接:http://www.cnblogs.com/xingshansi/p/9063131.html 前言 相比DFT,CZT是完成频谱细 ...
- C#跑马灯,图片滚动,后台获取图片地址。动态绑定图片,imag显示文字
下面附下载地址. http://download.csdn.net/download/njxiaogui/10002058 1.跑马灯效果,图片连续循环滚动,图片下面并可附文字描述,图片是从数据库中获 ...
- Atitit s2018.5 s5 doc list on com pc.docx Acc 112237553.docx Acc baidu netdisk.docx Acc csdn 18821766710 attilax main num.docx Atiitt put post 工具 开发工具dev tool test.docx Atiitt 腾讯图像分类相册管家.docx
Atitit s2018.5 s5 doc list on com pc.docx Acc 112237553.docx Acc baidu netdisk.docx Acc csdn 1882 ...
- Linux Performance tool
https://www.tecmint.com/command-line-tools-to-monitor-linux-performance/ https://www.tecmint.com/lin ...
- kali 安装google chrome浏览器(离线手动)
一.官网下载安装包 需要在google官网下载chrome安装包,安装时请仔细选择安装包,.deb的安装包适用于Debian/Ubuntu系统,.rpm适用于 Fedora/openSUSE系统. k ...
- SQL Server 2016 查询存储性能优化小结
SQL Server 2016已经发布了有半年多,相信还有很多小伙伴还没有开始使用,今天我们来谈谈SQL Server 2016 查询存储性能优化,希望大家能够喜欢 作为一个DBA,排除SQL Ser ...
- jinfo
jinfo是jdk自带的命令,用来查看.修改jvm的配置参数. [weblogic@host bin]$ jinfo-bash: jinfo: command not found[weblogic@h ...
- Python实现正则表达式匹配任意的邮箱
首先来个简单的例子,利用Python实现匹配163邮箱的代码: #-*- coding:utf-8 -*- __author__ = '杨鑫' import re text = input(" ...
- hdoj:2085
核反应堆 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...