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. go select 使用总结

    转载请注明出处: 在Go语言中,select语句用于处理多个通道的并发操作.它类似于switch语句,但是select语句用于通信操作,而不是条件判断.select语句会同时监听多个通道的操作,并选择 ...

  2. 分享一个Java功能小案例(代码已开源哦)

    工程合集 工程列表 地址预览 B站 抖音

  3. 【git】基于JGit通过ssh-url拉取指定commit-id的代码

    实现 1️⃣ pom依赖: <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>o ...

  4. 【SpringBoot】注解

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

  5. you-get的使用

    转载自: 利用Python下载:You-Get的安装及使用方法 - 宁佳兵 - 博客园   宁佳兵 所谓的光辉岁月,并不是后来闪耀的日子,而是无人问津时,对梦想的偏执. 博客园 首页 标签 GitHu ...

  6. Git无法push提示报错443

    更新 设置代理不能完美解决问题,需要检查本地的SSH配置是否正确,以及正确配置SSH密钥关联github账户 配置SSH参考链接: <GitHub如何配置SSH Key> https:// ...

  7. [爬虫]1.2.2 CSS选择器

    CSS (Cascading Style Sheets) 是一种样式表语言,用于描述HTML元素的样式.CSS选择器是CSS规则的一部分,它决定了CSS规则应用于哪些元素.在网络爬虫的开发中,我们经常 ...

  8. ubuntu server安装图形化界面

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

  9. 文心一言 VS 讯飞星火 VS chatgpt (74)-- 算法导论7.2 2题

    二.如果用go语言,当数组A的所有元素都具有相同值时,QUICKSORT的时间复杂度是什么? 文心一言: 在Go语言中,对一个所有元素都相等的数组进行快速排序(QuickSort)的时间复杂度是O(n ...

  10. 面霸的自我修养:ThreadLocal专题

    王有志,一个分享硬核Java技术的互金摸鱼侠 加入Java人的提桶跑路群:共同富裕的Java人 今天是<面霸的自我修养>第5篇文章,我们一起来看看面试中会问到哪些关于ThreadLocal ...