首页 > 其他分享 >MUH and Cube Walls 题解

MUH and Cube Walls 题解

时间:2023-09-22 11:45:52浏览次数:38  
标签:Cube 题解 sum 差分 Walls right 哈希 做法

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 的代码

标签:Cube,题解,sum,差分,Walls,right,哈希,做法
From: https://www.cnblogs.com/TKXZ133/p/17721943.html

相关文章

  • c#Winform窗体实际运行大小与size属性设置不一致问题解决
    privatevoidForm1_Load(objectsender,EventArgse){RectangleScreenArea=System.Windows.Forms.Screen.GetWorkingArea(this);//GetWorkingArea()检索显示器的工作区(工作区是显示器的桌面区域,不包括边界、标题栏、任务栏、停靠窗口和停靠......
  • vue学习问题解决
    报错errorComponentname"Index"shouldalwaysbemulti-wordvue/multi-word-component-names解决方法1、问题说明:在创建组件命名时,引用index.vue的过程中报错;2、报错的原因及分析:其一、报错的全称为:errorComponentname"index"shouldalwaysbemulti-wordvue/multi-w......
  • 容斥原理应用Acwing890借鉴题解
    参考文献简单的容斥原理介绍请看下图:C++代码简单的容斥原理介绍请看下图:本题思路:将题目所给出的m个数可以看成是m位的二进制数,例如当p[N]={2,3}时,此时会有01,10,11三种情况而二进制的第零位表示的是p[0]上面的数字2,第1位表示p[1]上面的数字3所以当i=1时表示只选择2的......
  • 题解 ARC141D【Non-divisible Set】
    这个题不是网络流。problem我们说一个集合\(D\)是一个好的集合,当不存在集合中的两个不同元素\(a,b\)使得\(a\)是\(b\)的约数。给定\(N\)个整数的一个集合\(S\),值域均落在\([1,2*M]\)内。对\(S\)中的每个元素\(A_i\)询问:是否存在一个恰好包含\(A_i\)的\(......
  • Little Victor and Set 题解
    LittleVictorandSet题目大意在\([l,r]\)中选不超过\(k\)个相异的数使得异或和最小,输出方案。思路分析分类讨论:当\(k=1\)时:显然选\(l\)是最优的。当\(r-l+1\le10\)时:直接\(O(n2^n)\)暴力枚举每个数选或不选即可。(判了这个之后后面的很多讨论会简单很......
  • docker搭建青龙面板及白屏问题解决方法
    最近也是想赚点小钱,搭建个青龙面包来挂脚本,但是在搭建过程中遇到过一些问题,所以记录下来。docker搭建青龙面板我这里是使用aliyun服务器进行搭建的,系统是centOS7.6版本。另外docker自行搜索安装即可。拉取青龙面板镜像远程登录服务器,输入命令拉取青龙镜像dockerpullwhyour......
  • 题解 P9019 [USACO23JAN] Tractor Paths P
    显然,对于给定的\(l,r\),最短路可以贪心求出,即每次走与当前区间相交且左端点最大的区间,这个可以用倍增加速。定义\(f_{i,j}\)表示从区间\(i\)往右走\(j\)步后到达的区间,\(g_{i,j}\)表示往左走的情况。正反遍历一下即可求出\(f_{i,1}\)和\(g_{i,1}\)。对于第二问,第\(i......
  • To_Heart—题解——好多好多!
    1.CF1860Dlink&&submission发现自己并不会处理纯纯的dp甚至自己根本不会dp!定义dp_{i,j,k}状态表示前i个字符有j个0,01的数量减去10的数量为k。转移比较显然了,答案是\(dp_{n,cnt0,0}\),其中cnt0是原序列中0的个数。注意k有正负。2.CF1860Flink.首先......
  • 【UVA 12676】Inverting Huffman 题解(哈夫曼树)
    静态霍夫曼编码是一种主要用于文本压缩的编码算法。给出的文本为由N个不同字符组成的特定大小,算法选择N个代码,每个代码对应一个不同的字符性格使用这些代码压缩文本。为了选择代码,算法构建一个有N片叶子的二元根树。对于N≥2,树可按如下方式构建。1.对于文本中的每个不同字符,构......
  • 题解 UVA1537 Picnic Planning
    这道题在显然是最小生成树,但是很显然我是不会打最小生成树的。题意描述给定一张\(n\)个点\(m\)条边的无向图,求出无向图的一棵最小生成树,满足一号节点的度数不超过给定的整数\(s\)。具体思路首先,看到这种度数最多为\(s\)的题,显然想到wqs二分。但是wqs二分是恰好选......