洛谷P4324 扭动的回文串
传送门
题目描述
JYY有两个长度均为 NN 的字符串 AA 和 BB。
一个扭动字符串S(i,j,k)S(i,j,k) 由 AA 中的第 ii 个字符到第 jj 个字符组成的子串与 BB 中的第 jj 个字符到第 kk 个字符组成的子串拼接而成。
比如,若 A=A= ’XYZ’,B=B=’UVW’,则扭动字符串 S(1,2,3)=S(1,2,3)= ’XYVW’。
JYY 定义一个扭动的回文串为如下情况中的一个:
AA 中的一个回文串;
BB 中的一个回文串;
或者某一个回文的扭动字符串S(i,j,k)S(i,j,k)
现在 JYY 希望找出最长的扭动回文串。
输入格式
第一行包含一个正整数 NN。 第二行包含一个长度为 NN 的由大写字母组成的字符串 AA。 第三行包含一个长度为 NN 的由大写字母组成的字符串 BB。
输出格式
输出的第一行一个整数,表示最长的扭动回文串。
输入输出样例
输入 #1复制
5
ABCDE
BAECB
输出 #1复制
5
说明/提示
样例解释 最佳方案中的扭动回文串如下所示(不在回文串中的字符用 . 表示):
.BC…
…ECB
对于所有的数据,1 \leq n \leq 10 ^ 51≤n≤10
5
上代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
typedef unsigned long long ll;
using namespace std;
const int maxn=1e5+5,INF=0x3f3f3f3f,base=233;
inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9')s=s*10+ch-'0',ch=getchar();return s*w;
}
int n,ans,len1[maxn],len2[maxn],len11[maxn],len22[maxn];
char a[maxn],b[maxn];
ll h1[maxn],g1[maxn],h2[maxn],g2[maxn],poww[maxn];
int Binary1(int l,int r,int now){int mid;while(l<=r){mid=(l+r)>>1;if(h1[now]-h1[now-mid]*poww[mid]==g1[now]-g1[now+mid]*poww[mid])l=mid+1;else r=mid-1;}return l-1;
}
int Binary11(int l,int r,int now){int mid;while(l<=r){mid=(l+r)>>1;if(h1[now]-h1[now-mid]*poww[mid]==g1[now+1]-g1[now+1+mid]*poww[mid])l=mid+1;else r=mid-1;}return l-1;
}
int Binary2(int l,int r,int now){int mid;while(l<=r){mid=(l+r)>>1;if(h2[now]-h2[now-mid]*poww[mid]==g2[now]-g2[now+mid]*poww[mid])l=mid+1;else r=mid-1;}return l-1;
}
int Binary22(int l,int r,int now){int mid;while(l<=r){mid=(l+r)>>1;if(h2[now]-h2[now-mid]*poww[mid]==g2[now+1]-g2[now+1+mid]*poww[mid])l=mid+1;else r=mid-1;}return l-1;
}
int Binary4(int l,int r,int nowl,int nowr){int mid;while(l<=r){mid=(l+r)>>1;if(h1[nowl]-h1[nowl-mid]*poww[mid]==g2[nowr]-g2[nowr+mid]*poww[mid])l=mid+1;else r=mid-1;}return l-1;
}
int main(){freopen("A.in","r",stdin);freopen("A.out","w",stdout);n=read();scanf(" %s %s",a+1,b+1);poww[0]=1;for(int i=1;i<=n;i++)h1[i]=h1[i-1]*base+a[i],h2[i]=h2[i-1]*base+b[i],poww[i]=poww[i-1]*base;for(int i=n;i>=1;i--)g1[i]=g1[i+1]*base+a[i],g2[i]=g2[i+1]*base+b[i];for(int i=1;i<=n;i++){len1[i]=Binary1(1,min(i,n-i+1),i),len11[i]=Binary11(1,min(i,n-i+1),i);ans=max(ans,max(len1[i]*2-1,len11[i]*2));}for(int i=1;i<=n;i++){len2[i]=Binary2(1,min(i,n-i+1),i),len22[i]=Binary22(1,min(i,n-i+1),i);ans=max(ans,max(len2[i]*2-1,len22[i]*2));}for(int i=1;i<=n;i++){ans=max(ans,len1[i]*2-1+Binary4(0,n-len1[i]-i+2,i-len1[i],i+len1[i]-1)*2);ans=max(ans,len11[i]*2+Binary4(0,n-len11[i]-i+1,i-len11[i],i+len11[i])*2);ans=max(ans,len2[i]*2-1+Binary4(0,n-len2[i]-i+1,i-len2[i]+1,i+len2[i])*2);ans=max(ans,len22[i]*2+Binary4(0,n-len22[i]-i+2,i-len22[i]+1,i+len22[i]+1)*2);}cout<<ans<<endl;return 0;
}
洛谷P4324 扭动的回文串相关推荐
- 洛谷 P4324 [JSOI2016]扭动的回文串 manacher+字符串hash
题目描述 JYY有两个长度均为 NNN 的字符串 AAA 和 BBB. 一个扭动字符串 S(i,j,k)S(i,j,k)S(i,j,k) 由 AAA 中的第 iii 个字符到第 jjj 个字符组成的子 ...
- 洛谷P4287 [SHOI2011]双倍回文 题解
洛谷P4287 [SHOI2011]双倍回文 题解 题目链接:P4287 [SHOI2011]双倍回文 题意: 记字符串 www 的倒置为 wRw^RwR .例如 (abcd)R=dcba(\tt{a ...
- [JSOI2016]扭动的回文串
题目 非常板子了 看到求什么最长的回文,我们就想到枚举回文中心的方法 首先对于这个回文串只包含在一个串内的情况,我们随便一搞就可以了,大概\(Manacher\)一下就没有了 对于那种扭动的回文串,我 ...
- BZOJ4755 [Jsoi2016]扭动的回文串
标签:Manacher,hash,二分 题目 题目传送门 Description JYY有两个长度均为N的字符串A和B. 一个"扭动字符串S(i,j,k)由A中的第i个字符到第j个字符组成的 ...
- bzoj4755: [Jsoi2016]扭动的回文串 manacher+二分+Hash
bzoj4755: [Jsoi2016]扭动的回文串 Description JYY有两个长度均为N的字符串A和B. 一个"扭动字符串S(i,j,k)由A中的第i个字符到第j个字符组成的子串 ...
- bzoj 4755: [Jsoi2016]扭动的回文串 manachar+hash+二分
题意 JYY有两个长度均为N的字符串A和B. 一个"扭动字符串S(i,j,k)由A中的第i个字符到第j个字符组成的子串与B中的第j个字符到第k个字符组成的子串拼接而成. 比如,若A='XYZ ...
- BZOJ4755: [JSOI2016]扭动的回文串——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4755 JYY有两个长度均为N的字符串A和B. 一个"扭动字符串S(i,j,k)由A中的第 ...
- 【JSOI2016】扭动的回文串
内存限制:256 MiB 时间限制:1000 ms 题目描述 JYY 有两个长度均为 N 的字符串 A 和 B. 一个「扭动字符串」S(i,j,k)S(i,j,k)S(i,j,k) 由 A 中的第 i ...
- 【BZOJ4755】 [Jsoi2016]扭动的回文串
BZOJ4755 [Jsoi2016]扭动的回文串 Solution 考虑对于他给出的 A中的一个回文串: B中的一个回文串: 或者某一个回文的扭动字符串S(i,j,k) 这样子几个限制,我们1,2就 ...
最新文章
- 一文掌握机器学习必备数学知识(附学习资源)
- 编程之美-子数组之和的最大值(二维)方法整理
- php-cgi并发,对于php-fpm和cgi,还有并发响应的理解
- 供应商去市网维护银行账号信息_供应商信息中心是BBP系统中一项很重要的内容...
- Mate 30 不预装任何谷歌应用;阿里巴巴发布新“六脉神剑”;VS Code 1.38 发布 | 极客头条...
- centos7自带流量监控软件iftop
- 2022 年最佳 15 款网络监控工具
- SOTA级发丝抠图模型PP-Matting重磅开源,支持多场景精细化分割!
- android儿童模式 htc,HTC自家系统优化工具Boost+ 任何Android手机都可用
- vuecli添加和移除插件_『Clickteam Fusion插件开发基础』
- 快捷方式 java 桌面_创建桌面快捷方式
- 【学习随记】Gyro,Btn,filters_addClass
- 想成为一个Java软件工程师,谁能带我学一学?
- 问:全局变量是否可以定义在被多个.c文件包含的头文件.h中?
- pytohn 单下划线与双下划线的区别
- GitHub Desktop图文教程
- html表格翻页简单,利用jQuery实现一个简单的表格上下翻页效果
- HTML中来访时间,html记录用户的访问次数代码
- 【Python】 Python编程基础练习100题学习记录第七期(61~70)
- Webots简单自学笔记(随时更新)
热门文章
- star-rating评分插件的使用
- ADS解决xxxis an undefined model
- uoj #246. 【UER #7】套路
- 大数据统计大量股票开盘平均价和收盘平均价
- suunto android 跑步软件,SUUNTO APP | 自定义运动模式教程
- ASP.NET控件中回车自动跳转至下指定控件
- 没想到,中国邮政卖奶茶:一铺开就是全国第一
- Windows下的Program Files (x86)文件夹是干什么的?
- 如何使用Mock进行单元测试
- iphone6s计算机驱动,教你iphone6s连接电脑出现驱动问题怎么办及iOS9.0.2 App Store打不开问题的解决方法...