03 2019 档案
摘要:我们考虑如果我们能快速的得出一条路线上的字符串组成的字典树,那么问题就迎刃而解了。开太多的字典树,开不下,我们可持久化以下就好了。 持久化出根到每个结点的字典树,然后ans(a) + ans(b) - 2 * ans(lca)即可。 可持久化字典树应该如何操作呢,我们考虑,对于一个字典树x,我们向其
阅读全文
摘要:特别水一道题,还写错了。每行维护一个前缀和,枚举矩形的左上角,扫矩阵第一行的长度,然后看这个长度能向下维持几行。但是忘记考虑要向上也扫一下能维持几行,再求一个和的。因为可能1的长度是逐行递减的,下面的矩形可以向上延申。
阅读全文
摘要:这题的题意看了20min才看懂,一直以为那个5*5的表格是上面两个序列匹配的结果推出来的,然后下面的结果是那个5*5的表格推出来的............ 题目还是很简单的,有些类似LCS。dp[i][j]表示第一个序列匹配到i,第二个序列匹配到j,产生的最大相似度。然后转移的时候考虑,有三个情况,
阅读全文
摘要:我们发现,我们从前往后DP有苦难,因为现在的选择存在后效性。 如果我们从后向前DP,f[i]表示从i时刻到下班的最小工作时间,从后向前转移,则不存在后效性问题。
阅读全文
摘要:这么水的题不想水博客来着,但是感觉这种把原序列倍增后,进行区间DP的思路很奇妙,记录一下。 因为是一个环,所以对原序列倍增后,再进行DP,最后枚举起始位置。 dp[i][j]表示[i,j]这一段合并产生的最大/最小价值。
阅读全文
摘要:计算一下,对于主人经过一段路线,宠物来得及跑到哪些景点再跑回来。然后对于主人的一段路程看作一个点,与来得及的景点连边。跑一下匈牙利算法就可以了。
阅读全文
摘要:可能是我有点菜,网上的题解都看不懂......但是写完之后看了好多题解代码,很多都有不影响正确性的思维上的小错误... 回顾下点分治的基理,就是选定重心,把重心的答案和一些点对经过重心路径产生的答案全部都处理出来,从而使得所有子树再也没有任何关系,从而独立而分治。 基本上O(nlogn),树上点对问
阅读全文
摘要:点分治算法很容易常数写大?不开O2就被卡常。 很裸的点分治,从选出的根开始往其余的子树搜,看一下当前经过的路径长度tot,k-tot是否在set中,在就找到了长度为k的路径。唯一要注意下的就是,当前子树经过的路径长度不能直接丢到set里,要搞一个临时的tpset来暂存下,搜完这棵子树再把这个tpse
阅读全文
摘要:忽然感慨,现在可以随便用__gcd这种函数了。 点分治一下就好了,最开始点分治的时候忘记选重心,T了一发。 考虑对于当前点,所有其他点到当前的路径,长为0的t[0]个,长为1的t[1]个,长为2的t[2]个。(取模后长度)那么我们对于一个点x来说,经过他的路径的总数为t[0]*t[0] + t[1]
阅读全文
摘要:分块算法通常能跟暴力相结合,从而在较为优秀的时间内解决一个常规方法难以解决的问题,很神奇。 我们考虑将序列分块,每个块内按照身高排序。 对于修改操作,我们对于左右的边界所在的块,排回原序后,暴力修改,再按照身高排回来。O(sqrt(n)logn)。对于中间的整块,打一个标记来修改。O(sqrt(n)
阅读全文
摘要:实际上跟哈希没有关系,跟分块也没关系。 sum[p][k]表示取模p,余k的所有下标位置的和。up为sqrt(n)。显然我们可以在O(nsqrt(n))的时间内预处理出sum数组。对于p不超过up的询问直接输出即可。 如果出现修改操作,我们只要单独修改被修改位置对整个sum数组的影响即可。复杂度为O
阅读全文
摘要:之前只做过分块做法,补一下树状数组做法。 我们先考虑一个问题,如何求从[1,x]这一区间内元素不同的个数?显然我们只要从到到位,遇到一个新的元素,就在对应位置+1,然后使用树状数组求前缀和即可。 这里我们需要去求[x,y],所求区间的左端点也会发生变化。我们先按照[1,x]的方法预处理出这个前缀和数
阅读全文

浙公网安备 33010602011771号