MUH and Cube Walls

前言

怎么题解区同质化这么严重,16 篇题解全是 差分 + KMP,就没有人写别的做法吗。

(好吧其实是我一开始没想到差分才有了这么多奇怪做法)

题目大意

给定两个序列 \(a,b\),求 \(b\) 在 \(a\) 中出现了多少次。

我们定义 \(b\) 在 \(a\) 的出现次数为:

\[\sum_{i=1}^n\left[\left(\sum_{j=1}^m[a_{i+j-1}-b_j=a_{i+j-1}-b_1]\right)=m\right]
\]

其中 \(n=|a|,m=|b|\)。

思路分析

  • 做法 1:

将 \(a,b\) 分别差分,对两个差分数组做 KMP 字符串匹配,这也是其他所有题解的做法。

时间复杂度为 \(O(n+m)\)。

  • 做法 2:

直接对 \(a,b\) 分别哈希,得到哈希数组 \(f,g\),这里我们的哈希使用多项式哈希,也就是说

\[f_n=\left(\sum_{i=1}^np^{n-i}a_i\right)\bmod P
\]

那么我们判定 \(b\) 在 \(a\) 中出现一次的依据就是 \(\sum_{i=0}^{m-1}p^i\mid (f_{i+m-1}-p^{m}f_{i})-g_m\)。也就是从 \(i\) 开始的长为 \(m\) 的 \(a\) 的哈希值与 \(b\) 的全哈希值的差可以被 \(\sum_{i=0}^{m-1}p^i\) 整除。

时间复杂度为 \(O(n+m)\),常数稍大。

  • 做法 3:

我们使用线段树维护哈希,每次 check 时先进行一次区间减操作,把二者的差值减掉,再比较区间和全串的哈希值,最后把差值加回去。

时间复杂度为 \(O(n\log n)\)。

  • 做法 4:

差分 + 哈希。(跟 KMP 没什么区别)

  • 做法 5:

其他的数据结构维护哈希(比如分块,平衡树)

只要是支持区间合并和区间加的数据结构就行。不过应该没人会写。

代码

做法 3 的代码

MUH and Cube Walls 题解的更多相关文章

  1. [codeforces471D]MUH and Cube Walls

    [codeforces471D]MUH and Cube Walls 试题描述 Polar bears Menshykov and Uslada from the zoo of St. Petersb ...

  2. D - MUH and Cube Walls

    D. MUH and Cube Walls   Polar bears Menshykov and Uslada from the zoo of St. Petersburg and elephant ...

  3. Codeforces Round #269 (Div. 2) D - MUH and Cube Walls kmp

    D - MUH and Cube Walls Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & % ...

  4. Codeforces Round #269 (Div. 2)-D. MUH and Cube Walls,KMP裸模板拿走!

    D. MUH and Cube Walls 说实话,这题看懂题意后秒出思路,和顺波说了一下是KMP,后来过了一会确定了思路他开始写我中途接了个电话,回来kaungbin模板一板子上去直接A了. 题意: ...

  5. CodeForces 471D MUH and Cube Walls -KMP

    Polar bears Menshykov and Uslada from the zoo of St. Petersburg and elephant Horace from the zoo of ...

  6. MUH and Cube Walls

    Codeforces Round #269 (Div. 2) D:http://codeforces.com/problemset/problem/471/D 题意:给定两个序列a ,b, 如果在a中 ...

  7. Codeforces 471 D MUH and Cube Walls

    题目大意 Description 给你一个字符集合,你从其中找出一些字符串出来. 希望你找出来的这些字符串的最长公共前缀*字符串的总个数最大化. Input 第一行给出数字N.N在[2,1000000 ...

  8. codeforces MUH and Cube Walls

    题意:给定两个序列a ,b, 如果在a中存在一段连续的序列使得 a[i]-b[0]==k, a[i+1]-b[1]==k.... a[i+n-1]-b[n-1]==k 就说b串在a串中出现过!最后输出 ...

  9. CF471D MUH and Cube Walls

    Link 一句话题意: 给两堵墙.问 \(a\) 墙中与 \(b\) 墙顶部形状相同的区间有多少个. 这生草翻译不想多说了. 我们先来转化一下问题.对于一堵墙他的向下延伸的高度,我们是不用管的. 我们 ...

  10. CodeForces–471D--MUH and Cube Walls(KMP)

    Time limit         2000 ms  Memory limit  262144 kB Polar bears Menshykov and Uslada from the zoo of ...

随机推荐

  1. Mysql基础篇(三)之多表查询

    一. 多表关系 一对多(多对一) 多对一 一对一 1. 一对多 (1). 案例:部门与员工的关系 (2). 关系:一个部门对应多个员工,一个员工对应一个部门 (3). 实现:在多的一方建立外建,指向一 ...

  2. zynq7000 emc启动及其加速

    背景需求 ZYNQ 7000系统在出场时需要将固件从eMMC启动,原因有2: FLASH存储空间小: SD卡容易脱落,不适合产品存放系统文件: 需要注意,ZYNQ7000 系列不支持eMMC作为BOO ...

  3. 【SpringBoot】整合Redis

    1.前言 最近公司在做项目,用到了redis,,发现自己一点都不会,然后就乘闲暇时间,自己学习一些redis相关的知识,在这里分享给像我一样的初学者. 2.我的项目结构: 2.1 pom.xml &l ...

  4. 【SpringBoot】注解

    Controller - @RestController - @RequestMapping("/path") Controller内方法 @GetMapping("/p ...

  5. The server time zone value '?泄???????' is unrecognized or represents more t

    hibernate配置文件如下 运行在服务器上,报错如下 解决方案: 在jdbc连接的url后面加上serverTimezone=GMT即可解决问题,因为是数据库和系统时区差异所造成的, 即 < ...

  6. Centos7下创建Oracle用户

    Centos7下创建Oracle用户 Oracle中,一个用户其实就类似于一个数据库,本次就来创建一个新用户 登录 将系统用户切换到oracle用户下 su - oracle -- 启动sqlplus ...

  7. ubuntu server安装图形化界面

    只需一个命令,然后重启即可: # apt-get install ubuntu-desktop # 查看下一次启动的设置 systemctl get-default # reboot

  8. 使用DBeaver连接数据库

    下载网站:官网下载 参考链接:使用 DBeaver 连接 OceanBase

  9. 宝塔面板配合tomcat部署静态资源网站

    在宝塔中安装下图所示软件 第一步:上传代码到服务器 第二步,点击JAVA项目一键部署 点击添加项目 第一次使用时项目版本是为空的,点击下方的版本管理进行安装 需要填写的选项 至此配置完成 访问方式 i ...

  10. ubuntu下安装mysqlclient报错

    输入以下代码: 1 解决方法: 2 sudo apt-get install libmysqlclient-dev 3 4 再次安装: 5 pip3 install mysqlclient 文章链接: ...