题目大意:

题目链接:https://jzoj.net/senior/#main/show/3337
给出两个字符串a,ba,ba,b,在aaa中改不超过一个字符,求这个新串的前缀为bbb的字串的最大前缀。


思路:

考虑暴力如何搞定这道题。枚举aaa串在bbb串中的位置,然后暴力往后判断修改不超过一个字符的最大前缀长度。时间复杂度O(nm)O(nm)O(nm)。
但是我们发现前缀长度是单调的,也就是说如果aaa的前kkk位可以在bbb中被匹配,那么aaa的前k−1k-1k−1位也可以被匹配。所以我们可以二分出第一段匹配的长度,然后下一个字符不能匹配,然后再二分出第二段的长度,总长度就是两段的长度加上1。
判断两个字符串是否匹配显然可以用字符串hashhashhash。
时间复杂度O(nlog⁡n)O(n\log n)O(nlogn)


代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef unsigned long long ull;const int N=50010;
const ull base=131;
ull hasha[N],hashb[N],p[N];
int n,m,l,r,mid,ans,len;
char a[N],b[N];int main()
{scanf("%s",a+1);scanf("%s",b+1);n=strlen(a+1);m=strlen(b+1);p[0]=1;for (int i=1;i<=n;i++){hasha[i]=hasha[i-1]*base+(a[i]-'a'+1);if (n>=m) p[i]=p[i-1]*base;}for (int i=1;i<=m;i++){hashb[i]=hashb[i-1]*base+(b[i]-'a'+1);if (m>n) p[i]=p[i-1]*base;}for (int i=1;i<=m;i++){l=0; r=min(n,m-i+1);while (l<=r){int mid=(l+r)>>1;if (hasha[mid]==hashb[i+mid-1]-hashb[i-1]*p[mid]) l=mid+1;else r=mid-1;}len=l-1;l=0; r=min(n-len-1,m-i-len);while (l<=r){int mid=(l+r)>>1;if (hasha[len+mid+1]-hasha[len+1]*p[mid]==hashb[i+len+mid]-hashb[i+len]*p[mid]) l=mid+1;else r=mid-1;}if (len+l>ans) ans=len+l;}printf("%d\n",min(ans,n));return 0;
}

【JZOJ3337】wyl8899的TLE【二分】【哈希】相关推荐

  1. POJ - 3974 Palindrome(二分+哈希/马拉车)

    题目链接:点击查看 题目大意:给出一个字符串,求字符串中最长的回文子串,这个字串可以包含主串本身 题目分析:这个题就是之前徐州网络赛的那个回文题目的弱化版..那个题目正解是要用回文自动机,但我不会,当 ...

  2. jzoj3337-[NOI2013模拟]wyl8899的TLE【字符串hash,二分】

    正题 题目大意 两个字符串A,BA,BA,B.可以修改AAA中的一个字符使得AAA中的1∼k1\sim k1∼k是BBB的子串,求kkk的最大值. 解题思路 先将AAA和BBB字符串hashhashh ...

  3. 牛客练习赛61 E 相似的子串(二分+哈希)难度⭐⭐⭐

    相似的子串 题目链接 时间限制:C/C++ 4秒,其他语言8秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format:%lld 题目描述 给定一个字符串,要求取 ...

  4. 2019牛客暑期多校训练营(第十场)C - Gifted Composer (二分+哈希)

    题目链接 题意 NNN次操作每次选择在字符串SSS的开始或者末尾拆入一个字符串,每次操作询问当前字符串一共有多少种循环节 思路 对最终的字符串做哈希处理,记录每次操作对应字符串SSS的区间[L,R][ ...

  5. NOI模拟20191029【线段树】【二分+哈希】【迭代+二分】

    两个水题一个神题. woj4777~4779 光线追踪 这个题,,一看就跟oil很像啊,,. 一个矩形有效的部分只有左边的和下边的两条线段.另外两条撞不到.所以拆分线段,维护x和y轴两个线段树,下标为 ...

  6. 【bzoj1567】【jsoi2008】【二分+哈希】Blue Mary的战役地图

    [bzoj1567]Blue Mary的战役地图 题目 Description Blue Mary最近迷上了玩Starcraft(星际争霸) 的RPG游戏.她正在设法寻找更多的战役地图以进一步提高自己 ...

  7. [JSOI2008]Blue Mary的战役地图(二分+哈希)

    Blue Mary最近迷上了玩Starcraft(星际争霸) 的RPG游戏.她正在设法寻找更多的战役地图以进一步提高自己的水平. 由于Blue Mary的技术已经达到了一定的高度,因此,对于用同一种打 ...

  8. 【CodeForces】961 F. k-substrings 字符串哈希+二分

    [题目]F. k-substrings [题意]给定长度为n的串S,对于S的每个k-子串$s_ks_{k+1}...s_{n-k+1},k\in[1,\left \lceil \frac{n}{2} ...

  9. 2019ICPC(徐州) - Colorful String(哈希+二分+动态规划/回文自动机)

    题目链接:点击查看 题目大意:给出一个字符串,询问该字符串中的所有回文子串中,各有多少不同的字母 题目分析:这个题题意很简单,在比赛的时候看到字符串第一反应是哈希,哈希+暴力+线段树果不其然的T掉了. ...

  10. P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold(加强版)(贪心+hash哈希)

    P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold(加强版)(贪心+hash哈希) 洛谷上这道水题丧心病狂地把数据范围加到了500000 普通的做法肯定A不了了, ...

最新文章

  1. 《spring揭秘》读书笔记二
  2. 项目范围管理——知识要点
  3. paradox 修改字段长度_400字的作文就只能写400字?刘强东:这不是笑话
  4. java 拼sql最大长度,java.sql.SQLNonTransientConnectionException: 用户 ID 长度 (0) 超出 1 到 255 的范围...
  5. shell 脚本中特殊变量
  6. C++开源矩阵计算工具——Eigen的简单用法(三)
  7. ATL是如何实现线程安全的引用计数和多线程控制的
  8. Python入门(六) list
  9. 简述C#中IO的应用 RabbitMQ安装笔记 一次线上问题引发的对于C#中相等判断的思考 ef和mysql使用(一) ASP.NET/MVC/Core的HTTP请求流程...
  10. JAVA Httpclient3.x与Httpclient4.x代码对比(post方法)
  11. 获取Android设备的序列号(SN号)
  12. javaee图书管理系统mysql_JavaEE 实例 图书管理系统
  13. Qt绘制星空图及卫星视图坐标
  14. 自动化测试 selenium 模块 webdriver使用02
  15. pandas的DataFrame数据画图matplotlab曲线如何改变时间刻度【间隔时间】并格式化日期显示总结
  16. MD5加密,16位加密,32位加密,Base64加密,解密
  17. 雷赛服务器信号er020,【雷赛】L6E 伺服系统 EtherCAT 通讯功能手册.pdf
  18. fest3d_AssertJ Fest Hamcrest
  19. 凡人修真3D(1)坐骑
  20. Chrome浏览器开启黑暗模式

热门文章

  1. JavaScript创建对象的方式
  2. TLF80511TC 是一款线性低压差稳压器—科时进商城
  3. mongodb mysql数据类型_插入mongodb类型
  4. load.php 迅雷,C#_C#实现调用迅雷下载的方法,迅雷下载是目前使用非常普遍 - phpStudy...
  5. GraphQL基金会宣布与联合开发基金会合作推动开源和开放标准
  6. 130 个相见恨晚的超实用网站,一次性分享出来。
  7. 【防火墙流控配置 基于主机的带宽控制】
  8. 回文数五位和六位c语言,特殊回文数
  9. bmp怎样转成jpg,bmp格式换jpg
  10. python selenium 跳转网页_selenium关于页面跳转