随笔分类 -  算法_哈希

摘要:其实可以二分矩阵边长但是我太懒了$qwq$。 把每个子矩阵扔到$map$里,然后就没了 2019.07.11 阅读全文
posted @ 2019-07-11 16:18 LuitaryiJack 阅读(161) 评论(0) 推荐(0)
摘要:我的天。。普及组这么$hard$。。。 然后好像没有人用我的垃圾做法,,,好像是$O(n)$,但十分的慢,并且极其暴力$qwq$ 具体来说,就是直接$dfs$求出树高,然后想像出把原来的树补成满二叉树的形态 $like\space this:$ 震不震惊$qwq$ 然后对子树哈希,同时保存正向的哈希 阅读全文
posted @ 2019-07-09 00:05 LuitaryiJack 阅读(225) 评论(0) 推荐(0)
摘要:当初竟然看成子串了$qwq$,不过老师的$ppt$也错了$qwq$ 由于子序列一定是的排列,所以考虑插入$1$到$m$到$n-m+1$到$n$; 如何判断呢?可以用哈希$qwq$; 我们用线段树维护哈希值,合并时用就把左子树的哈希值$x[ls]$在$B$进制下左移$sum[rs]$位,即$x[tr] 阅读全文
posted @ 2019-06-15 23:57 LuitaryiJack 阅读(372) 评论(0) 推荐(0)
摘要:设$f[i]$表示切掉前$i$位和后$i$位后,即剩下$s[i+1]到s[n-i]$,的公共前后缀长度。此时我们发现,$f[i-1]$相对于$f[i]$少切了两个$char$,所以有$f[i-1]\leq f[i]+2$,所以我们可以有上界地递推了。 当然最终答案是$max(f[i]+i),且1-s 阅读全文
posted @ 2019-06-13 00:25 LuitaryiJack 阅读(313) 评论(0) 推荐(1)
摘要:先把两个串能匹配模式串的位置找出来,然后标记为$1$(标记在开头或末尾都行),然后对标记数组求一个前缀和,这样可以快速查到区间内是否有完整的一个模式串。 然后二分子串(答案)的长度,每次把长度为$md$的串扔到哈希表里,查一波匹不匹配。 2019.06.12 阅读全文
posted @ 2019-06-12 23:58 LuitaryiJack 阅读(149) 评论(0) 推荐(1)
摘要:昨天卡了一天常数。。。然后发现吧$unsigned\space long\space long$改成$unsigned$就可以过了$qwq$ 先把每一行的前缀哈希求出,然后再竖着把每个前缀哈希值哈希起来(相当于二维前缀哈希) 注意横着和竖着哈希的$Base$不能相同 2019.06.12 阅读全文
posted @ 2019-06-12 23:53 LuitaryiJack 阅读(238) 评论(0) 推荐(1)
摘要:自己简直是傻死了。。。对于位置想错了。。。 二分出来的是LCP长度$+1$,即每一次二分出来的最后一个点都是失配的,而就算失配也会跳过这个点;所以当$k<=3$且模式串$s2$的指针$>len2$时,即跳过了$<=3$个点的位置且指针$>len2$时,都是可行的;当$k==4$且模式串$s2$指针$ 阅读全文
posted @ 2019-06-11 00:24 LuitaryiJack 阅读(226) 评论(0) 推荐(1)
摘要:之前就写过一遍,今天却写挂了,查了半天发现是数组名写错啦$qwq$ 观察到$K$很小,所以使得我们可以哈希(怎么什么都能哈希$qwq$)。我们把长度小于等于$50$的子串扔到哈希表里,并统计出现次数,注意每次合并和分离时,只加入或删除与断开点距离小于等于$50$的;因为其他子串长度太长,或是已经在前 阅读全文
posted @ 2019-06-10 21:32 LuitaryiJack 阅读(194) 评论(0) 推荐(1)
摘要:好吧我觉得是脑子,别人觉得是套路$qwq$ 这道题相当于是求除了$u,v$两点互相连接,所连的点相同的点对$(u,v)$ 我们首先每个点一个随机权值,对于$u$点记为$w[u]$,然后记与$u$点相连的点的异或和为$hsh[u]$ 分类: 对于第一种情况,直接枚举每条边上的两点就行了;对于第二种情况 阅读全文
posted @ 2019-06-10 21:22 LuitaryiJack 阅读(168) 评论(0) 推荐(1)
摘要:注意到这个在哈希时要考虑循环同构。。。所以哈希函数是$\sum a_i+\prod a_i$ 如果发现有哈希值相等的了就$ck$一下。 最后$ck$时可以用最小表示法的知识提高效率,,,先咕着。 2019.06.10 阅读全文
posted @ 2019-06-10 13:35 LuitaryiJack 阅读(144) 评论(0) 推荐(0)
摘要:这道题可以$O(nlogn)$,当然也可以$O(n)$做啦$qwq$ $O(nlogn)$的思路是枚举每个回文中心,通过哈希预处理出前缀和后缀哈希值备用,然后二分回文串的长度,具体的就是判断在长度范围内,前缀哈希值和后缀哈希值是否相等。 还有一个$Manacher$算法,可以在$O(n)$时间里解决 阅读全文
posted @ 2019-06-10 13:30 LuitaryiJack 阅读(221) 评论(0) 推荐(0)