05 2019 档案
摘要:Legen... 我们能很容易写出在AC自动机上的dp, dp[ k ][ i ][ j ]表示走了 k 步从 i 走到 j 的最大值。 k 很大我们考虑矩阵优化, 直接搞就好啦。 不知道为什么在本机上M * M * M * M **** * M 打多了就会卡死不知道为什么。。。
阅读全文
摘要:Best Edge Weight 我们先找出一棵最小生成树, 对于非树边来说, 答案就是两点路径上的最大值 - 1, 这个直接倍增就能处理。 对于树边来说, 就是非树边的路径经过这条边的最小值 - 1, 这个可以用并查集压缩路径 或者 更压st表一样的方式更新。 感觉就是没想到先扣出来一个最小生成树
阅读全文
摘要:Ann and Half-Palindrome 我居然写了个后缀排序。。 其实暴力把所有合法串丢进字典树里面就行了。
阅读全文
摘要:Erasing Substrings 感觉这种写法想不到啊。。。 dp[ i ][ j ] 表示选了 i 个, 删了的情况为 j 是否为字典序最小的串。 因为如果dp[ i ][ j ] 的字典序比 dp[ i ][ k ]的字典序小, dp[ i ][ k ] 就没有用了。 还需要sos dp 去
阅读全文
摘要:Crisp String 显然我们只要知道每个状态合不合法我们就能解决这个问题。 两两枚举相邻的字符, 去找不合法状态。
阅读全文
摘要:Bear and Destroying Subtrees 我们先考虑没有修改的到从根开始的最长期望深度。 dp[ i ][ j ] 表示 i 这棵子树所有的边有一半概率存在的情况下, 最长深度为 j 的概率。 我们只用考虑50层就够了, 因为概率随长度比边长成指数级减少。 这样的话,处理出一个 dp
阅读全文
摘要:Dreamoon and Binary 先预处理出从i 开始 和 从 j 开始的lcp, 然后直接dp
阅读全文
摘要:Igor and Interesting Numbers 枚举每一位, 用dp去算方案数。
阅读全文
摘要:感觉分情况讨论清楚就好啦, 不是很难写。
阅读全文
摘要:Beautiful Matrix 首先枚举哪一位分出大小, 然后计算比它小的方案数有多少种。 方案数 = 当前行的方案数 * 下面所有行的方案数。 如果下面还有x行, 那么下面所有行的方案数为 g ^ x, g 为全错排的方案数, 当前行的要预处理出f[ i ][ j ] f[ i ][ j ] 表
阅读全文
摘要:Functions On The Segments 考虑处理出所有x <= 2e5的答案。 用主席树去维护, 每个 x 的值, 因为是单点询问所以可以差分, 不用打标记。 一个PLL 打成了 PII, 找了半天bug。
阅读全文
摘要:Almost Increasing Array 来讲讲自己想到的和没想到的。。 首先要把严格递增变成非严格递增每个元素只要减去所处位置的下标。 然后我们考虑枚举被删除的点, 被删点前面的每个元素减去 i , 被删的每个点后面的元素减去 (i - 1) 然后求LIS, 在所有的LIS里面的最大值, 这
阅读全文
摘要:Game with Tokens 感觉是很好的一道题了。 感觉没有想到两点, 第一个是只想到白点肯定往, 一个方向跑, 所以四个方向肯定有人要拦着它, 所以两个对角线分成四个区域, 白点的四个区域内都得有点(不包括对角线), 没有想到横纵坐标的 奇偶性也要相同才能拦住, 虽然想到了转切比雪夫距离,
阅读全文
摘要:Bipartite Checking 感觉这种题写过很多次啦。 删边很难操作, 我们把边的影响区间丢到线段树上, 就全部变成加边了。 我们用按秩合并并查集维护每个点到根的奇偶性, 合并的时候能在小的子树的根打个标记。
阅读全文
摘要:Rhombus 不想写标程啊, 转成切比雪夫距离暴力就能过啦。。 复杂度n * m * k, 其实复杂度能处理到n * m
阅读全文
摘要:Camping Groups 通过分析我们能发现, 如果 i 以前放完了, i 以后随便放的话必定有解。 所以我们只要找出第一个比原串大的地方就好啦, 用hash来判断是不是回文。
阅读全文
摘要:Fetch the Treasure 感觉这题很nb啊, 虽然套了一个一点都不有趣的壳子。 我们注意到 k 的值在 1e4以内, 我们用d[ i ] 表示在模 k == i 能达到的最小的值是谁。 用最短路取更新。。
阅读全文
摘要:Camping Groups 我们先计算出, 每个点当leader所能掌控的最多人数。 然后我们把询问离线, 丢到responsibility最大的那个地方去。 然后从大到小往线段树里加人, 加入完之后处理掉当前的询问。 如果强制在线的话就只能树套树啦。
阅读全文
摘要:Dividing Kingdom 9!枚举, 码就完事了。
阅读全文
摘要:Greedy Subsequences 我们先找到每个点的右边第一个比它大的, 然后从大的往它建边, 然后可以发现这是一棵树。 我们令d[ i ] 为 i 号点往上走最多能走几步, 我们能用线段树维护d 的值。 我们加入点 i 的时候, 我们把它的值设为 d[ fa ] + 1, 我们删除 i 的时
阅读全文
摘要:Power Tree 没想到一个点到 1 的贡献和到 u 的贡献存在比例关系, 只要乘以 deg[ u ] * m[ u ], m[ u ] 表示 u 到 1, 所成的系数。 然后我们用dfs序建出线段树后, 维护每个点乘的系数, 区间值的和就可以了。
阅读全文
摘要:Two Permutations 关键是没想到按大小顺序把第二个排列一个一个加入线段树, 然后线段树维护整体的hash值, 得到的hs值减去一个sub 之后与, 第一个排列的hash值比较。
阅读全文
摘要:Cinema 感觉这个题好神啊。。。 首先如果 n 比 m 大, 我们先旋转90度。 我们要加入一个(x, y)的时候, 我们枚举答案所在的行离 x 的距离 g , 然后对于x + g 行来说 我们找到(x + g, y)左边的第一个和右边的第一个未被占的位置,更新答案, 如果 g > 答案 退出。
阅读全文
摘要:dp[ i ][ j ] 表示在 i 这棵子树中, 距离 i 最远点的距离为 j 的方案数。 转移应该挺显然的把, 记一下mxd[ u ] 表示 u 这颗子树的最大深度, 然后两个for套在一起复杂度就对了。
阅读全文
摘要:TorCoder 开26个线段树维护数量, 然后就没了。。
阅读全文
摘要:把式子二项式展开之后, 会发现是需要维护a[ i ], i * a[ i ] .... i ^ 5 * a[ i ], 的区间和, 然后用线段树维护。
阅读全文
摘要:Optimize! 这个题目代码看了我半天。。 我们把终点关注在b数组, 我们先将b[ i ] 变成 h - b[ i ]并排好序, 对于一个a[ j ]来说如果它能和b[ i ]匹配, 那么它能和b[ k ], k < i, 匹配。 什么情况下能匹配成功呢, 就是b数组中 前 i 个数至少能和 l
阅读全文
摘要:Deduction Queries 用并查集维护前缀的关系, 在同一个联通块内两两之间的异或值都是已知的。 每个点再维护一个和它当前父亲的异或值, 压缩路径的时候更新一下就好了。
阅读全文
摘要:Jamie and Tree 我们按 1 号点为根建dfs序线段树。即使换了根, 我们也能通过分类讨论去更新求答案。
阅读全文
摘要:Scalar Queries 昨天没打好像亏疯了, 好像都是sb题啊。 我们先考虑单个区间[L, R], 对于[L, R]中的一个数 x , 我们只需要只要有多少个数字排序之后排到它前面去了就好。 那么整体来说对于 x , 只有比 x 小的数字对 x 有贡献, 我们只要计算出所有比它小的数字, 在所
阅读全文
摘要:Range Deleting 考虑枚举L, R明显具有可二分性, 然后预处理一些东西, 二分就好啦。
阅读全文
摘要:Inversions After Shuffle 如果改变的是[L, R], 那么[L, R]内的逆序对数的期望为 len * (len - 1) / 2 所以我们的目标变成了, 求出所有区间内的逆序对之和, 这个用树状数组就能维护了。
阅读全文
摘要:Putting Boxes Together 二分找到分界点, 左边的往右移, 右边的往左移。 其实把a[ i ] - i 之后就变成了移到一个点, 然后我维护移到一个线段都要维护自闭了。
阅读全文
摘要:Subset Sums 把所有集合分成大于sqrt(n)和小于sqrt(n)的集合, 处理出每两个集合有交集是多大之后就可以在sqrt(n)的复杂内完成一次操作。
阅读全文
摘要:Till I Collapse 对于每个 k, 考虑贪心地取, 最多分成 n / k段, 每段都贪心取的话, 总次数为nlogn 用线段树维护这个过程, 在线段树上二分就可以了。
阅读全文
摘要:Nearest Leaf 没想到在dfs的过程中用线段树维护所有点到当前点的距离。
阅读全文
摘要:Recursive Queries 刚开始把最大位置看成最大值, 我想这怎么写啊。。。 如果是最大位置的话, 我们能计算区间内每个值作为最大值的贡献, 然后拆成右边边第一个比它大的下标减去左边第一个比它大的下标, 然后离线之后就可以树状数组维护了。
阅读全文
摘要:Fire in the City 二分答案, 用扫描先加线段树去check
阅读全文
摘要:Superhero's Job 首先要看出来是个积性函数, 我这个都没看出来, 我好菜啊。 看出来之后随便dp一下就好了。
阅读全文
摘要:首先肯定是将老鼠和洞都排好序, dp[ i ][ j ] 表示处理了 前 i 个洞, 进去 j 只老鼠的最小距离和, 很明显处理先处理靠前的老鼠。 然后观察一下这个dp, 发现它满足决策单调性, 然后直接上了个分治, 然后 T 了。 然后继续观察了半天, 发现对于, dp[ i - 1 ][ 0 ]
阅读全文
摘要:Parcels 感觉很巧妙的题呀。。 没想到转移的时候也需要一个dp, 就怎么算怎么感觉复杂度不对。。 dp[ i ][ s ] 表示 i 作为最底层的块, 它上面最多能放重量为 s 的最优值。 我们将包裹先按R小排, 再按L大排, 这样对于 i 这个包裹来说, 能放在它上面的都在它左边。 对于dp
阅读全文
摘要:World of Darkraft - 2 每个武器可以独立考虑贡献, 我们算单个武器的贡献。 考虑最朴素的dp, dp[ i ][ j ] 表示当前还有 i 个怪没有打, 当前的武器等级是 j 最后获得硬币的期望。 这显然是个n ^ 2的dp, 但是通过观察我们能发现, j 达到很大的概率非常小,
阅读全文
摘要:Periodical Numbers 我们先按长度分类对于当前处理的长度k, 我们令 F[ i ] 为有长度为 i 的循环节的方案数。 然后容斥出f[ i ] 表示最小循环节是 i 的方案数, 然后加起来。
阅读全文
摘要:Positions in Permutations 先dp出选 k 个的方案数, 这个很简单, dp[ i ][ j ][ u ][ v ]表示到 i 为止选了 j 个, i - 1的选取情况是 u, i 的选取情况是 v 的方案数。 然后最后容斥一下, 容斥系数是 C(i, k)。(虽然我不会证明
阅读全文
摘要:Delivery Club 首先二分答案, 我们考虑dp去check 我们可以发现所有状态要从两个点在 i 和 i - 1转移过来。 所以我们令dp[ i ] 表示 能否到达两个快递员在分别 i 号点 和 i - 1号点的状态。 转移就是把在 i 号位置的快递员不断地往后移, 如果能移到 j &&
阅读全文
摘要:Connecting Vertices 这种题就是看一眼就知道区间dp, 写一天也写不出来。。 f[ i ][ j ]表示区间[ i, j ] i 和 j 连边所构成的方案数。 g[ i ][ j ]表示区间[ i, j ] i 和 j 不连边所构成的方案数。求g 的时候枚举 j 和 k (并且这个
阅读全文
摘要:Fibonacci String Subsequences 读题把子序列读成子串, 码都码完了, 样例不对, 人傻了。 我dp的是每个匹配串的贡献, 然后发现子序列的话算贡献维护不了。。 没想到直接dp的就是在子序列中出现的次数。 dp[ i ][ l ][ r ] 表示的是在 F[ i ]这个串中
阅读全文
摘要:Tanks 最关键的一点就是怎么判方案是否存在。。 只要存在若干个坦克之和的sum % k == v % k 就有解, 否则无解。 我怎么想不到呢。。。
阅读全文
摘要:Vasya and Maximum Matching 首先能观察出, 只有完美匹配的情况下方案数唯一。 dp[ i ][ 0 ], dp[ i ][ 1 ], dp[ i ][ 2 ] 分别表示 对于 i 这棵子树 0: 不向上连边完成 1:向上连边完成 2:向上连边未完成 的方案数
阅读全文
摘要:Road Projects 根据基环分类讨论讨论。。
阅读全文
摘要:Flights for Regular Customers 临接矩阵的 k 次 就是 恰好 走 k 步从 i 走到 j 的方案数, 方案数在这里并不关键, 所以可以把它变成01矩阵。 一个很直观的想法是用二分取check它, 但是这并不单调。。 然后就不会了。。 我们可以把G[ n - 1] [ n
阅读全文
摘要:Tree Generator™ 两点间的距离为 depth[ u ] + depth[ v ] - 2 * depth[ lca ] 给的字符串可以看成dfs序, 对于x, y 下标, x < y, 他们的lca的肯定在x - y 之间并且dpeth最小。 问题转换成a[ x ] - 2 * a[
阅读全文

浙公网安备 33010602011771号