[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< ...
随机推荐
- C语言助教批改
作业批改 每次作业批改后写一篇作业点评,助教轮流写作业总结.(总结分工老师安排). 每个助教点评自己负责的同学博客,点评要详细,不能只有一句话. 有比较优秀博客请或典型问题推荐到qq群,并发给写总结助 ...
- 20155214&20155216 实验一 开发化境的熟悉
20155214&20155216 实验一 开发化境的熟悉 实验内容: 实验一 开发化境的熟悉-1-交叉编译环境-(使用实验室台式机) 1.建立实验目录"mkdir linux_组员 ...
- selenium 爬虫
from selenium import webdriver import time driver = webdriver.PhantomJS(executable_path="D:/pha ...
- Flask 学习 十 博客文章
提交和显示博客文章 app/models.py 文章模型 class Post(db.Model): __tablename__ = 'posts' id = db.Column(db.Integer ...
- nyoj 矩形个数
矩形的个数 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 在一个3*2的矩形中,可以找到6个1*1的矩形,4个2*1的矩形3个1*2的矩形,2个2*2的矩形,2个3 ...
- c# gridview 新增行
string[] newRow = {"long","d","b"}; Gridview.Rows.Insert(Gridview.Rows ...
- 裸辞两个月,海投一个月,从Android转战Web前端的求职之路
前言 看到这个标题的童鞋,可能会产生两种想法: 想法一:这篇文章是标题党 想法二:Android开发越来越不景气了吗?前端越来越火了吗? 我一向不喜欢标题党,标题中的内容是我的亲身经历.我是2016年 ...
- c 存储类型
1,c语言中的存储类型(定义变量和函数的可见范围和生命周期)这些说明符放置在它们所修饰的类型之前.下面列出 C 程序中可用的存储类: auto register static extern 2,aut ...
- SQL Server 实现类似C#中 PadLeft功能
USE [Test] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO --@column 表示字段或者常量,@paddingChar 表示 补位 ...
- Spring知识点回顾(04)el 和资源使用
注入普通字符 注入操作系统属性 注入表达式运算结果 注入其他bean属性 注入文件内容 注入网址内容 注入属性文件