「Log」做题记录 2023.10.30-2023.11.26

\(2023.10.30-2023.11.5\)

\(\color{blueviolet}{AT\_abc285\_g}\)

神秘题。

网络流是显著的,建边方式如下:

  • 所有边容量都为 \(1\)
  • 每个点拆为入点和出点,\(S\) 向入点连边,出点向 \(T\) 连边。
  • 1 的入点向出点连边。
  • 2 的出点向四联通的 2? 的入点连边
  • ? 当做上两个处理。

考虑到唯一一种使得其不可行的构造是出现奇环,但网格显著并无奇环。

\(\color{blueviolet}{CF1530F}\)

此题是神秘题。

考虑反着做,将至少有一行或一列或一条对角线全为 \(1\) 概率转换为所有行列对角线都至少有一个 \(0\)

先不考虑行与对角线,只考虑满足所有列都至少有一个 \(0\) 该怎么做,为了使得我们的不完全做法有扩展性,我们考虑使用容斥。

过程如下:

  1. 加上至少\(0\) 列全为 \(1\) 的概率。(对于至少\(x\) 列全为 \(1\) 的概率,可以理解为我们选定 \(x\) 列,使得其全为 \(1\)(概率相乘),其他列的 \(0/1\) 情况我们不考虑(概率为 \(1\))。而选定的 \(x\) 列的所有情况概率要加和,比如我选定 \(1\) 列,那么情况总数有 \(n\) 种,这些情况的概率都要加和。)

  2. 减去至少\(2\) 列全为 \(1\) 的概率。

  3. 加上至少\(3\) 列全为 \(1\) 的概率。

  4. 以此类推。

这样容斥并不难理解,我们需要求的是所有列至少有一个 \(0\) 的情况,对于第一步加的概率显然是全情况的概率,我们减去其中有一列为 \(1\) 的概率,但此时对于两行为 \(1\) 的情况我们减了两遍。举个例子,对于 \(1,2\) 号列全为 \(1\) 的某种情况,我们选定 \(1\) 号列时和选定 \(2\) 好列时分别减去了一遍,所以要在接下来的运算中将其加回来,以此类推。

接下来考虑在这样计算列的贡献时计算行的贡献,首先每一行的贡献互不影响,考虑固定选定的列进行某一行的运算,我只要保证舍去行的全为 \(1\) 的概率即可。我们设 \(f_{i,j}\) 表示对于第 \(i\) 行,选定 \(j\) 状态列(\(j\) 是一个状压状态,这里选定其中的列就相当于在第 \(i\) 行中该位置一定为 \(1\)。),不考虑其他位置 \(0/1\) 状态的概率。这个东西显然是可以预处理的。

于是就有第 \(i\) 行在状态 \(j\) 下的贡献概率 \(g_{i, j} - g_{i, 2 ^ {n - 1}}\),其中我们减掉的是此行全为 \(1\) 的状态,也就是上文说到舍去的部分

最后对角线与列的处理相同,枚举一下状态即可,使得一行与对角线交点的位置为 \(1\) 即可。

\(\color{blueviolet}{CF1530F}\)

此题是坏题,他卡你空间。

每一个元素有选或不选两种状态,并且有依赖项,元素的贡献有正负,数据范围不大,可以自然联系到最大权闭合子图,采用最小割模型。

建模方式如下:

  1. 对于一个正权点 \(u\),连边 \(S \to u\),容量为 \(b_i\)
  2. 对于一个负权点 \(u\),连边 \(u \to T\),容量为 \(-b_i\)
  3. 对于所有 \(i\),对于其所有依赖的 \(j\) 连边,容量为正无穷。

但这样建边空间就爆炸了,考虑到值域很小,一个数不同约数个数不会很多。对于一个数 \(a_i\),枚举其约数 \(x\),对于每一个 \(x\) 只需要向最近的 \(x\) 建边即可,这样由于依赖关系的传递性不会出问题。

现在考虑最小割的意义,对于源点到正权点的一条边流满表示这个点我们舍弃掉了,对于负权点到汇点的边流满表示这个点我们被迫选择了,所以有答案 \(\left( \sum \limits _ {b_i > 0} b_i \right) - f\),其中 \(f\) 为最小割。

\(\color{royalblue}{CF1517E}\)

思考发现最后的串只能是 C/P CCC PCPCPC PPP C/P 或者 PPPPP CCCCC 这种形式,大力分类讨论,注意细节即可。

\(\color{blueviolet}{CF1511F}\)

先建 Trie 树,设 \(f_{i, u, v}\) 到第 \(i\) 个字符,两个分割分别处在 \(u\) 节点与 \(v\) 节点的方案数。

暴力转移是简单的,数据范围提醒我们要用矩阵优化,对于一个状态(有序数对)\((u, v)\) 建立一个点,若状态 \((u, v)\) 可以向 \((u', v')\) 转移,则在代表两个状态的点之间连边。

特殊地,若 \(u'\) 是终止节点,则 \((u', v')\) 同时具有 \((0, v')\) 的转移,\(v'\) 也同理;若 \(u', v'\) 都是终止节点,状态 \((u', v')\) 同时具有 \((0, 0)\) 的转移。

所以对于上述情况,\((u, v)\) 也可以向 \((u', v')\) 的等价状态连一条边,于是我们得到了一个有向图,等价于让我们求长度为 \(m\) 的从 \((0, 0)\)\((0, 0)\) 路径条数,但此时状态数是 \(1600\) 左右的,显然我们不能接受,考虑优化方式。

首先对于状态 \(u, v\) 它可能是不存在的,因为 \(u, v\) 在 Trie 树上的形态必然是祖先和子代的关系,状态数来到 \(320\) 左右,再考虑 \((u, v)\)\((v, u)\) 在上述图中是对称的存在,考虑在矩阵中所成一个状态即可。

\(\color{limegreen}{CF1490G}\)

塞到 set 里乱搞即可。

\(\color{limegreen}{CF1495B}\)

分讨发现当且仅当最长一个坡并且其长度为奇数才可以,模拟即可。

\(\color{limegreen}{CF1512F}\)

贪心地考虑在最后停下的位置一直拿是更优的,枚举停下位置直接计算即可。

\(\color{limegreen}{CF1468J}\)

分与 \(k\) 的大小关系处理即可。

\(\color{limegreen}{CF1475D}\)

考虑性价比最优的,双指针对于 \(1/2\) 扫一遍即可。

\(\color{limegreen}{CF1500A}\)

考虑鸽巢原理,暴力是对的!找到一个就停即可。

\(\color{limegreen}{CF1509C}\)

考虑最大最小必然在两端,相同地,对于一个最大到一定大的段,它在整合后的序列中也是连续的,进行区间 DP 即可。

\(\color{royalblue}{CF1517D}\)

DP。

\(\color{limegreen}{CF1525D}\)

无脑费用流。

\(\color{limegreen}{CF1535D}\)

考虑继承左子节点所有信息或者右子节点所有信息,直接类线段树搞就行。

\(\color{limegreen}{CF1483B}\)

塞进双端队列里,一个数对最多算一次。

\(\color{royalblue}{CF1474D}\)

考虑第一个和最后一个数操作方法固定,不交换时可以直接递推。记录前缀后缀信息枚举交换位置查看可不可行即可。

\(\color{royalblue}{CF1477B}\)

考虑倒序操作,只能将一个区间少数变为多数,线段树模拟,最后判断和初始串是否相等即可。

\(\color{limegreen}{CF1475G}\)

转换为找最长链,递推一下即可。

\(\color{limegreen}{CF1536D}\)

考虑加入两个数,中位数移动范围只有一,随便维护即可。

\(\color{royalblue}{CF1525C}\)

首先可以考虑配对,然后只剩下左边一坨和右边一坨,分别处理再考虑剩下的一或两个即可。

\(\color{royalblue}{CF1538G}\)

考虑先让两个数通过 \(a, b\) 的差值尽量相同,然后再两个两个一起整。

\(2023.11.6-2023.11.12\)

\(\color{blueviolet}{CF1499F}\)

\(f_{u, x}\) 表示在 \(u\) 子树内,\(u\) 向下延伸最多 \(x\) 步的方案数。转移是简单的,考虑 \((u, v)\) 这条边断不断即可。复杂度类似树形背包,需要把上下界设置好,均摊复杂度可过。

\(\color{royalblue}{CF1468A}\)

考虑 DP 方式,在最长不降子序列问题基础上,考虑两个点之间是否能添加一个更大的,简单的。

\(\color{royalblue}{CF1467D}\)

DP 处理每个点被经过次数,设 \(f_{i,j}\) 表示在第 \(i\) 次移动完后停在 \(j\) 点的方案数。因为对于第 \(i\) 次,还有剩下的 \(k - i\) 次没有走,所以答案 \(g_j = \sum \limits_{i = 1} ^k f_{i, j}\times f_{k - i, j}\),剩下的随便写了。

\(\color{royalblue}{CF1476E}\)

对于一个非模式串找到所有与其可以匹配的模式串,要求的那唯一一个模式串必须在其他模式串之前出现,变成了图论建模题,拓扑排序即可。

\(\color{royalblue}{CF1485F}\)

考虑 DP,设 \(f_{i, j}\) 表示到第 \(i\) 个数,和为 \(j\) 的方案数。转移是显著的,一种转移相当于平移,维护一个标记即可;另一种需要维护一个所有 DP 值的和。

\(\color{royalblue}{CF1491E}\)

对于一个大小为 \(f_i\) 的树,找到一个大小为 \(f_{i - 1}\)\(f_{i - 2}\) 的子树时,那么剩余的大小也是一个斐波那契数,类似点分治的向下进行即可。

\(\color{royalblue}{CF1536E}\)

结论题。

\(\color{royalblue}{CF1510D}\)

考虑 DP,乘积过大就转对数,好 Trick。

\(\color{blueviolet}{SP2916}\)

简单维护最大子段和,端点情况进行讨论即可。

\(\color{royalblue}{CF1220E}\)

一个边双里面的贡献显然都可以取到,先缩点,缩点后变成一棵树 \(f_{i, 0/1}\) 表示节点 \(i\) 回来 / 不回来最大能得到的贡献(有点麻烦了),简单转移即可。

\(\color{blueviolet}{CF510D}\)

裴蜀定理会给出答案。直接 DP 就行,\(f_i\) 表示 \(\gcd\)\(i\) 时的最小花费,用 map 存一下,每次遍历转移即可。

\(\color{blueviolet}{CF1038E}\)

区间 DP,\(f_{i, j, t1, t2}\) 表示区间 \([i, j]\) 中的色块,合并为一个(不一定全要用)一端点为 \(t1\),另一端点为 \(t2\) 的价值最大值,转移是简单的,特殊考虑翻转即可。(这个做法是假的,只是反例较为特殊!)

\(\color{royalblue}{CF1038E}\)

考虑转移是暴力转移是简单的,线性的东西考虑用矩乘优化,建一下即可。

\(\color{black}{CF1474F}\)

对于每一种最小值不同的答案,每一个答案的下标两两不交,可以考虑对于每一个最小值分别处理。

\(f_{i,j}\) 表示第 \(i\) 段为止,以 \(j\) 结尾的上升子序列个数,可以考虑用矩乘优化转移。

\(\color{black}{CF1476F}\)

\(f_i\) 表示前 \(i\) 个能照亮的最大前缀,二分转移即可。

\(\color{royalblue}{AT\_joisc2015\_b}\)

T2,最终答案形态固定,直接枚举起点即可。

\(\color{Lavender}{AT\_joisc2015\_e}\)

T3,讨论下无解情况,数列值域要求连续,随便计数即可。

\(\color{royalblue}{AT\_joisc2015\_c}\)

T4,设 \(f_i\) 表示取第 \(i\) 个,只考虑左侧的最大贡献,线段树优化一下,前后做两遍即可

\(\color{blueviolet}{CF1487F}\)

神秘的数位 DP,状态设完之后考虑其中两位可能很大,但通过结论可以证明大于一定程度时不优,进行剪枝即可。

\(\color{blueviolet}{CF1534F2}\)

处理出来一个节点能被覆盖的最左最右,然后转换为区间覆盖,贪心求解。

\(\color{royalblue}{CF1534F1}\)

上题简单版。

\(\color{royalblue}{CF1499E}\)

考虑 DP 即可。

\(\color{royalblue}{CF1528C}\)

第二棵树转 DFN 序乱搞即可。

\(\color{royalblue}{CF1468M}\)

根号分治。

\(\color{limegreen}{P9836}\)

质因数分解后显著的贪心即可。

\(\color{blueviolet}{P9837}\)

神秘构造,神秘的解决即可。

\(2023.11.13-2023.11.19\)

\(\color{black}{P4117}\)

第二分块

\(\color{black}{CF1535F}\)

首先 \(f(x, y)\) 是个诈骗函数,值只可能为 \(0, 1, 2, 1337\) 其中的一种,\(0, 2, 1337\) 都好求,只需要考虑 \(1\) 的贡献。

首先考虑将字符串按照构成分组,一组一组解决,组与组之间都是 \(1337\)

对于一组,考虑一个串 \(s\),对于其一段极长有序段 \(l, r\),与它 LCP 大于等于 \(l - 1\),LCS 小于等于 \(r - 1\) 的串都可以构成函数值为 \(1\) 的贡献。

想到正反建 Trie 数,于是相当于求出符合 \(l1 \le dfn1_i \le r1 \land l2 \le dfn2_i \le r2\)\(i\) 个数,将第一维限制拆成前缀然后直接二维数点即可。

\(\color{black}{CF1528E}\)

将问题转化一下,树的形态被简单限制,钦定一个点只有两个子节点进行树个数 DP,巨大分论即可。

\(\color{blueviolet}{CF1487G}\)

诈骗题,最多两个数字超出范围,打进两维状态,设一个胖 DP,稍微优化一下即可。

\(\color{royalblue}{CF1184E2}\)

没水平题。

\(\color{royalblue}{P8280}\)

胖 DP,状压,然后状态堆到一块即可。

\(\color{blueviolet}{CF1093G}\)

直接维护 \(32\) 种情况即可。

\(\color{royalblue}{CF506D}\)

根号分治。

\(\color{blueviolet}{CF1468B}\)

神秘题,拿 set 维护一段一段的,每次合并两个,按照 \(k\) 递减顺序。

\(\color{blueviolet}{CF1468B}\)

神秘的 set 乱搞。

\(\color{blueviolet}{CF1479D}\)

异或哈希加主席树即可。

\(\color{blueviolet}{CF1481E}\)

神秘的 DP。

\(\color{royalblue}{CF1497D}\)

神秘的 DP。

\(2023.11.20-2023.11.26\)

\(\color{royalblue}{P3806}\)

点分治板子。

\(\color{blueviolet}{P4178}\)

点分治板子。

\(\color{blueviolet}{P4149}\)

点分治板子,稍微维护一下一个长度路径至少需要几条边即可。

\(\color{black}{P2664}\)

静态点分治。

考虑颜色对端点的贡献,首先特殊化根的答案以及贡献,这部分是简单的,然后考虑子树内节点的答案以及贡献。

\(f_x\) 表示节点 \(x\) 的贡献,对于一个节点 \(x\),若其祖先节点中没有和其同色的,有 \(f_x = siz_x\),否则 \(f_x = 0\)

对于某点 \(x\),考虑一条 \(x\)\(y\) 的路径,将其分为 \(x \to \mathrm{root}\) 以及 \(\mathrm{root} \to y\) 两部分分别考虑贡献。

对于前者,考虑此部分的每个颜色,都会在 \(y\) 取到不同的点的时候造成一次贡献,所以每个颜色会产生 \(siz_{\mathrm{root}} - siz_{\mathrm{branch}}\) 的贡献,其中 \(\mathrm{branch}\) 表示 \(x\) 所在的子树。

对于后者,考虑每个节点都会造成一次贡献,所以有贡献 \(\sum \limits _ {y \notin \mathrm{branch}} f_y\)

考虑两部分贡献可能多算,因为颜色可能有重复,也就是说统计 \(\mathrm{root} \to y\) 部分贡献时只能累加不在 \(x \to \mathrm{root}\) 路径上的颜色的贡献,我们选择额外减去其贡献。

对于一个点 \(x\),一次计算中有其答案(设 \(x \to \mathrm{root}\) 路径上的颜色集合为 \(C\)):

\[\sum \limits _ {y \notin \mathrm{branch}} f_y - \sum \limits _{y \notin branch \land \mathrm{color}_y \in C} f_y + \sum \limits _{t \in C} \left(siz_{\mathrm{root}} - siz_{\mathrm{branch}}\right) \]

其中 \(\sum \limits _ {y \notin \mathrm{branch}} f_y = \sum \limits_{i \in T_{\mathrm{root}}} f_i - \sum \limits_{i \in mathrm{branch}} f_i\),然后写巨大多 DFS 就可以解决了。

\(\color{blueviolet}{P6329}\)

动态点分治模板,需要处理的部分很多,细节也一坨。

\(\color{blueviolet}{P3345}\)

动态点分治,首先考虑在点分树上移动找最优点,然后动态点分治计算贡献即可。

\(\color{blueviolet}{P3241}\)

考虑点分树每个节点维护到其父亲的信息,开一个 vector 保证有序即可。

\(\color{blueviolet}{CF741D}\)

树上启发式合并板子,颜色状态记录奇偶即可,状态压进桶里即可。

\(\color{blueviolet}{P3380}\)

树套树模板。

\(\color{blueviolet}{P3759}\)

树套树维护二维偏序。

\(\color{blueviolet}{P4093}\)

树套树优化 DP 转移。

\(\color{black}{P5692}\)

第四分块(加强版)。

\(\color{black}{P5397}\)

第四分块。

\(\color{blueviolet}{P3825}\)

首先不考虑 \(x\),2-sat 是显著的,考虑枚举 \(x\) 状态,再进行 2-sat。

\(\color{royalblue}{CF549B}\)

神秘构造,模拟即可。

posted @ 2023-11-01 09:26  Eon_Sky  阅读(21)  评论(0编辑  收藏  举报