杂题20200407
给定 \(n\) 个点和一个常数 \(D\) ,第 \(i\) 个点权值为 \(a_i\) ,点 \(i,\ j\) 之间有一条边权为 \(|i-j|\times D+a_i+a_j\) 的边,求这张完全图的 MST 权值
- \(n\leq2\times10^5\)
- \(D,\ a_i\in[1,\ 10^9]\)
我会 Boruvka 直接莽, \(O(nlog^2n)\)
考虑分治,假设当前处理到了区间 \([l,\ r]\) ,可以发现 \([l,\ mid]\) 与 \([mid+1,\ r]\) 之间的某些边是不会被用到的,只用建出 区间 \([l,\ mid]\) 内 \(A_{pos}-pos\times D\) 最小的 \(pos\) 到 \([mid+1,\ r]\) 中每一个点的边;区间 \([mid+1,\ r]\) 内 \(A_{pos}+pos\times D\) 最小的 \(pos\) 到 \([l,\ mid]\) 中每一个点的边
一共会建出 \(O(n\log n)\) 条边,暴力求最小生成树,时间复杂度 \(O(n\log ^2n)\)
还有一种线性的神仙做法,鸽了
GCJ 2018 Round 1B Task2 Mysterious Road Signs
给定三个长为 \(n\) 的序列 \(A,\ B,\ D\) ,其中 \(D\) 单调递增
定义一段区间 \([l,\ r]\) 合法,当且仅当 \(\exist\ (M,\ N),\ \forall\ l\leq i\leq r,\ D_i+A_i=M\) 或 \(D_i-B_i=N\) 成立
求出合法区间的最长长度,与最长的合法区间个数
- \(n\leq10^5\)
- \(A_i,\ B_i,\ D_i\in[1,\ 10^6]\)
做法一:
分治,对于区间 \([l,\ r]\) ,求出 \(mid,\ mid+1\) 对应的 \(M,\ N\) ,往左 / 往右找到第一个不满足 \(M\) / \(N\) 限制的位置,讨论四种情况即可, \(O(n\log n)\)
做法二:
记 \(f(i,\ j,\ k)\) 为 以 \(i\) 结尾,限制条件中的 \(M=j,\ N=k\) 时,最长的合法区间长度
有用的状态数显然是线性的
转移可以考虑记一个 \(g1(i,\ j)\) 表示限制条件中的 \(M=j,\ N=-1\) 时,最长的合法区间长度; \(g2(i,\ k)\) 表示限制条件中的 \(M=-1,\ N=k\) 时,最长的合法区间长度
现在 \(f(i,\ j,\ k)\) 就可以从 \(f(g1(i,\ j)-1),\ f(g2(i,\ k)-1)\) 转移,时空复杂度 \(O(n)\)
CF444C DZY Loves Colors
给定一个序列,初始 \(a_i=i\) ,每个位置的权值为 \(0\) ,有 \(q\) 次操作:
- 将区间 \([l,\ r]\) 赋值为 \(x\) ,如果第 \(i\) 个位置被赋值为 \(x\) ,第 \(i\) 个位置的权值会增加 \(|a_i-x|\)
- 询问区间 \([l,\ r]\) 的权值和
\(n,\ q\leq10^5\)
结论:序列的颜色段数量在 \(q\) 次操作中总共只会有 \(O(n+2q)\) 种
因此在线段树上,对于区间颜色相同的点直接打 tag,否则暴力递归
CF808G Anthem of Berland
给定两个串 \(s,\ t\) ,\(s\) 包含小写字母和问号, \(t\) 仅包含小写字母
将 \(s\) 中的每个问号变成一个小写字母(共 \(26^{cnt}\) 种方案),求出所有方案中, \(t\) 匹配 \(s\) 子串的次数的最大值
\(|s|,\ |t|\leq10^5;\ |s|\cdot|t|\leq10^7\)
做法一:
记 \(f_{i,\ j}\) 为走到 \(s\) 的第 \(i\) 位,匹配了 \(t\) 的前 \(j\) 个字符,当前答案的最大值
对于 \(s_i=\ ?\) ,暴力枚举 \(26\) 种字符,使用 kmp 转移
做法二:
记 \(f_i\) 为走到 \(s\) 的第 \(i\) 位,当前答案的最大值
可以枚举是否在 \(i\) 处匹配一个 \(t\) 转移,由于最优解 \(t\) 的所有匹配位置可能有交,因此要枚举 \(t\) 的所有 next,但是这并不能保证 \(s\) 对应位置等于 \(t\) 的某一个前缀,因此需要保证在上一段 \(s\) 的末尾放了一个 \(t\)
因此记 \(g_i\) 为强制在 \(s\) 的第 \(i\) 位匹配一个 \(t\) ,当前答案的最大值,即可转移
CF1327D Infinite Path
给定一个长为 \(n\) 的排列 \(p\) ,和一个颜色序列 \(c_i\)
定义两个排列 \(p,\ q\) 的乘积为 \(\{p_{q_i}\}\)
找到最小的正整数 \(k\) ,令 \(q=p^k\) ,存在 \(i\) 满足 \(c_i=c_{q_i}=c_{q_{q_i}}=\cdots\)
\(\displaystyle\sum n\leq2\times10^5\)
结论1:将 \((i,\ p_i)\) 连边,对于 \(p\) 中的所有环,在新图内从这个环的第 \(i\) 个点向第 \(i+k\) 个点连边,构成了 \(p^k\) 的图
结论2:令 \(p\) 中的某一个环环长为 \(sz\) ,则这个环在 \(p^k\) 中构成的环与 \(p^{\gcd(k,\ sz)}\) 中构成的环元素相同
题目即为找一个 \(k\) 使得 \(p^k\) 存在一个颜色相同的环,由于结论2,对于 \(p\) 中的一个环,枚举 \(sz\) 的所有因数 \(k\) ,考虑这个环在 \(p^k\) 中的构成,判断是否满足条件,时间复杂度 \(O(n\sqrt n)\)