[BZOJ]4755: [Jsoi2016]扭动的回文串
Time Limit: 10 Sec Memory Limit: 512 MB
Description
Input
Output
Sample Input
ABCDE
BAECB
Sample Output
最佳方案中的扭动回文串如下所示(不在回文串中的字符用.表示):
.BC..
..ECB
Solution
Code
#include<cstdio>
#include<algorithm>
using namespace std;
#define MN 100000
#define X 31
#define MOD 998244353
char a[MN+],b[MN+],s[MN*+];
int n,p[MN+],ha[MN+],hb[MN+],d[MN*+],ans;
void solve(char*S)
{
int i,mx=,L,R,l,r,mid,res;
for(s[]='.',i=;i<*n;++i)s[i]=i&?S[i+>>]:'#';
for(i=;i<*n;++i)
{
d[i]=mx+d[mx]<i?:min(d[*mx-i],mx+d[mx]-i);
while(s[i+d[i]+]==s[i-d[i]-])++d[i];
if(i+d[i]>mx+d[mx])mx=i;
L=i-d[i]+>>;R=i+d[i]+>>;
if(S==a)--R;else ++L;
for(l=,r=min(L-,n-R);l<=r;)
{
mid=l+r>>;
if((1LL*(ha[L-]-1LL*ha[L-mid-]*p[mid])%MOD+MOD)%MOD==
(1LL*(hb[R+]-1LL*hb[R+mid+]*p[mid])%MOD+MOD)%MOD)res=mid,l=mid+;
else r=mid-;
}
ans=max(ans,R-L++res*);
}
}
int main()
{
int i,mx;
scanf("%d%s%s",&n,a+,b+);
for(p[]=i=;i<=n;++i)p[i]=1LL*p[i-]*X%MOD;
for(i=;i<=n;++i)ha[i]=(1LL*ha[i-]*X+a[i])%MOD;
for(i=n;i;--i)hb[i]=(1LL*hb[i+]*X+b[i])%MOD;
solve(a);solve(b);
printf("%d",ans);
}
[BZOJ]4755: [Jsoi2016]扭动的回文串的更多相关文章
- 【BZOJ4755】 [Jsoi2016]扭动的回文串
BZOJ4755 [Jsoi2016]扭动的回文串 Solution 考虑对于他给出的 A中的一个回文串: B中的一个回文串: 或者某一个回文的扭动字符串S(i,j,k) 这样子几个限制,我们1,2就 ...
- BZOJ4755: [JSOI2016]扭动的回文串——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4755 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个字符 ...
- 【题解】Luogu P4324 [JSOI2016]扭动的回文串
原题传送门 这题实际挺水的 先对两个字符串分别跑马拉车 就能求出1.2类扭动回文串最大的长度 考虑第三类的扭动回文串\(S(i,j,k)\),一定可以表示为\(A(i,l)+A(l+1,j)+B(j, ...
- [JSOI2016]扭动的回文串
题目 非常板子了 看到求什么最长的回文,我们就想到枚举回文中心的方法 首先对于这个回文串只包含在一个串内的情况,我们随便一搞就可以了,大概\(Manacher\)一下就没有了 对于那种扭动的回文串,我 ...
- BZOJ4755:[JSOI2016]扭动的回文串
浅谈\(Manacher\):https://www.cnblogs.com/AKMer/p/10431603.html 题目传送门:https://lydsy.com/JudgeOnline/pro ...
- P4324 [JSOI2016]扭动的回文串
传送门 对\(A\).\(B\)串各跑一遍\(manacher\),求出第\(1\).\(2\)类扭动回文串的最大长度. 考虑第三类的扭动回文串\(S(i,j,k)\),一定可以表示为\(A(i,l) ...
- BZOJ4755 [JSOI2016]扭动的回文串 【后缀数组】【manacher】
题目分析: 我写了史上最丑的后缀数组,怎么办? 首先manacher一遍两个串,这样只用考虑第三问.用$作为间隔符拼接两个串,把第一个串翻转.枚举回文中心,取最长的回文串,对于剩下的部分利用LCP匹配 ...
- BZOJ4755 JSOI2016扭动的回文串(二分答案+哈希)
显然答案应该是由单串以某位置为中心的极长回文串继续在另一个串里拓展得到的.枚举中间位置二分答案,哈希判断即可.注意考虑清楚怎么处理偶回文,比如像manacher一样加分隔符. #include< ...
随机推荐
- Alpha冲刺博客集
传送门 冲刺随笔 Alpha冲刺day1 (10.31):第一天博客地址 Alpha冲刺day2 (11.01):第二天博客地址 Alpha冲刺day3 (11.02):第三天博客地址 Alpha冲刺 ...
- python的项目结构
项目结构 知识点 创建项目,编写 __init__ 文件 使用 setuptools 模块,编写 setup.py 和 MANIFEST.in 文件 创建源文件的发布版本 项目注册&上传到 P ...
- HTML 字符集
在 HTML 中,正确的字符编码是什么? HTML5 中默认的字符编码是 UTF-8. 这并非总是如此.早期网络的字符编码是 ASCII 码.后来,从 HTML 2.0 到 HTML 4.01,I ...
- PHP冒泡排序、选择排序、插入排序
$arr = [1, 8, 7, 5, 4, 2, 11, 9, 20]; 冒泡排序: for ($i = 0; $i < count($arr); $i ++) { for ($j = 0; ...
- Python内置函数(20)——hex
英文文档: hex(x) Convert an integer number to a lowercase hexadecimal string prefixed with "0x" ...
- Python内置函数(10)——float
英文文档: class float([x]) Return a floating point number constructed from a number or string x. If the ...
- python的命名空间
Python的命名空间是Python程序猿必须了解的内容,对Python命名空间的学习,将使我们在本质上掌握一些Python中的琐碎的规则. 接下来我将分四部分揭示Python命名空间的本质:一.命名 ...
- Dojo API中文 Dojo内容模块概览,初学者
官网:http://dojotoolkit.org/reference-guide/1.10/dojo/index.html#dojo-dojo的翻译 dojo 内容: dojo dojo/dojo ...
- JMeter入门(01)概念和样例
一.概念 JMeter 是一款专门用于功能测试和压力测试的轻量级测试开发平台,实现了许多和互联网相关的网络测试组件,同时还保留着很强的扩展性. JMeter可以用来测试诸如:静态文件,Java Ser ...
- istio入门(00)istio的学习资源
官网:https://istio.io/ 理论知识: http://www.uml.org.cn/wfw/201710131.asp 环境搭建: http://dockone.io/article/2 ...