随笔分类 - OJ -- BZOJ
摘要:【BZOJ2957】楼房重建(线段树) 题面 "BZOJ" 题解 对于整个区间维护最大斜率以及只考虑这个区间的答案 考虑如何向上合并。 首先左半段的答案是一定存在的 所以,现在的问题就是右半段能够贡献的答案 如果右半段的最大斜率小于左半段的最大斜率,则不存在贡献 否则,如果右半段分为右左和右右两段
阅读全文
摘要:[BZOJ1501][NOI2005]智慧珠游戏(搜索) 题面 我要一改我懒惰的作风 这道题目必须放题面 Description Input 文件中包含初始的盘件描述,一共有10行,第i行有i个字符。 如果第i行的第j个字符是字母”A”至”L”中的一个,则表示第i行第j列的格子上已经放了零件,零件的
阅读全文
摘要:【BZOJ1499】瑰丽华尔兹(动态规划) 题面 "BZOJ" 题解 先写部分分 设$f[t][i][j]$表示当前在$t$时刻,位置在$i,j$时走的最多的步数 这样子每一步要么停要么走 时间复杂度$O(nmt)$ 得分$40~70$分 (据说这样能过???) cpp include includ
阅读全文
摘要:【BZOJ2599】Race(点分治) 题面 "BZOJ权限题,洛谷" 题解 好久没写过点分治了。。。 在ppl的帮助下终于想起来了 ~~orz ppl~~ 首先回忆一下怎么求有没有正好是$K$的路径 维护一个表示距离的桶 对于当前重心,依次插入每棵子树的距离值 然后检查是否存在即可 显然加一步,求
阅读全文
摘要:【BZOJ2998】Problem A(动态规划) 题面 "BZOJ" 题解 一个人的成绩范围可以确定为一个区间 这样就变成了 选择若干区间,不重合, 每个区间有个权值,求最大权值和 这样就可直接$dp$了 cpp include include include include include in
阅读全文
摘要:【BZOJ4556】字符串(后缀数组,主席树) 题面 "BZOJ" 题解 注意看题: 要求的是$[a,b]$的 子串 和[c,d]的$lcp$的最大值 先来一下暴力吧 求出$SA$之后 暴力枚举$[A,B]$之间的后缀 求一个$lcp$ 复杂度$O(nm)$ $40$分到手
阅读全文
摘要:【BZOJ4552】排序(线段树,二分答案) 题面 "BZOJ" 题解 好神的题啊 直接排序我们做不到 怎么维护? 考虑一下,如果我们随便假设一个答案 怎么检验它是否成立? 把这个数设成$1$,其他的数字都设成$0$ 最后检查一下这个位置是不是$1$就好啦 但是这样没法排序 那么,我们考虑二分一个答
阅读全文
摘要:【BZOJ2754】喵星球上的点名(AC自动机) 题面 "BZOJ" 题解 友情提示:此题请不要在cogs上提交,它的数据有毒 对于点名串构建$AC$自动机 然后把名字丢进去进行匹配, 大力统计一下答案即可 当然,要用$map$记录$trie$树 cpp include include includ
阅读全文
摘要:【BZOJ2160】拉拉队排练(回文树) 题面 "BZOJ" 题解 看着题目, 直接构建回文树 求出每个回文串的出现次数 直接按照长度$sort$一下就行了 然后快速幂算一下答案就出来了 这题貌似可以用Manacher做吧 求出以每个字符为中心的回文串的最大长度 然后搞一下前缀和就行了 cpp in
阅读全文
摘要:【BZOJ4805】欧拉函数求和(杜教筛) 题面 "BZOJ" 题解 好久没写过了 正好看见了顺手切一下 令$$S(n)=\sum_{i=1}^n\varphi(i)$$ 设存在的某个积性函数$g(x)$ $$(g \varphi)(i)=\sum_{d|i}g(d)\varphi(\frac{i}
阅读全文
摘要:【BZOJ2342】双倍回文(回文树) 题面 "BZOJ" 题解 构建出回文树之后 在$fail$树上进行$dp$ 如果一个点代表的回文串长度为$4$的倍数 并且存在长度为它的一半的回文后缀 那么就是可行的 如何维护长度是一半的回文后缀? $fail$树上的父亲一定包括了它的所有的回文后缀 因此在$
阅读全文
摘要:【BZOJ2565】最长双回文串(回文树) 题面 "BZOJ" 题解 枚举断点$i$ 显然的,我们要求的就是以$i$结尾的最长回文后缀的长度 再加上以$i+1$开头的最长回文前缀的长度 至于最长回文前缀怎么求? 把串反过来前缀不就变成后缀了吗? 所以构造两个回文树就好啦 cpp include in
阅读全文
摘要:【BZOJ2882】工艺(后缀自动机) 题面 "BZOJ权限题,良心洛谷" 题解 还是一样的,先把串在后面接一遍 然后构建$SAM$ 直接按照字典序输出$n$次就行了
阅读全文
摘要:【BZOJ2882】工艺(后缀数组) 题面 "BZOJ权限题,我爱良心洛谷" 题解 最容易的想法: 把字符串在后面接一份 然后求后缀数组就行了。。。 cpp include include include include include include include include include
阅读全文
摘要:【BZOJ3926】诸神眷顾的幻想乡(后缀自动机) 题面 "BZOJ" 题解 广义后缀自动机啦 求多个串的不同子串个数? 当然是后缀自动机,最后只要把$longest parent.longest$求个和就好啦 那么这题怎么建后缀自动机 能够把所有子串都丢进去呢? 当然不用从每一个节点开始 把树建出
阅读全文
摘要:【BZOJ3277】串(后缀自动机) 题面 "BZOJ" 题解 广义后缀自动机??? 照着别人的打了一遍。。 相当于每个串都构建一个后缀自动机 构建完一个串之后,直接把当前的last指回root就行了??? 好吧,我觉得我看了一个假的广义后缀自动机。。 不过这道题这样就行了 考虑如何计算一个串在多少
阅读全文
摘要:【BZOJ5093】图的价值(第二类斯特林数,组合数学,NTT) 题面 "BZOJ" 题解 单独考虑每一个点的贡献: 因为不知道它连了几条边,所以枚举一下 $$\sum_{i=0}^{n 1}C_{n 1}^i·i^k·2^{\frac{n(n 1)}{2}}$$ 因为有$n$个点,所以还要乘以一个
阅读全文
摘要:【BZOJ4555】求和(第二类斯特林数,组合数学,NTT) 题面 "BZOJ" 题解 推推柿子 $$\sum_{i=0}^n\sum_{j=0}^iS(i,j)·j!·2^j$$ $$=\sum_{i=0}^n\sum_{j=0}^nS(i,j)·j!·2^j$$ $$=\sum_{i=0}^n\
阅读全文
摘要:【BZOJ3238】差异(后缀自动机) 题面 "BZOJ" 题解 前面的东西直接暴力算就行了 其实没必要算的正正好 为了方便的后面的计算 我们不考虑$i,j$的顺序问题 也就是先求出$\sum_{i=1}^n\sum_{j=1}^n[i\neq j]len[i]$ 然后对于每个后缀树上的节点,减去一
阅读全文
摘要:【BZOJ3998】弦论(后缀自动机) 题面 "BZOJ" 题解 这题应该很简单 构建出$SAM$后 求出每个点往后还能构建出几个串 按照拓扑序$dp$一些就好了 然后就是第$k$大,随便搞一下就好
阅读全文

浙公网安备 33010602011771号