做题记录 25.8.4
\(\textcolor{purple}\odot\) CF1623E Middle Duplication
对于点 \(u\),若左儿子存在且左儿子复制,则 \(u\) 复制;若 \(s_u\) 小于 中序遍历中下一个与 \(s_u\) 不同的字符,且复制 \(u\) 后顺带需要复制的节点数量(它的一部分祖先,若 \(u\) 复制则这些祖先复制)不超过 \(k\),则 \(u\) 复制;若 \(u\) 复制且存在右儿子,则递归考虑右儿子是否复制
直接模拟即可,时间复杂度 \(O(n)\)
\(\textcolor{purple}\odot\) CF1620G Subsequences Galore
令 \(a_{i,j}\) 为 \(s_i\) 中第 \(j\) 个字母的出现次数
令 \(Ss(s_i)\) 表示 \(s_i\) 的子序列集合,显然 \(|Ss(s_i)|=\prod_j (a_{i,j}+1)\)
对于所有 \(S\subseteq U=\{1,2,\cdots,m\}\),要求出 \(f(S)=|\bigcup_{u\in S}Ss(s_u) |\)
而
对于每个 \(S\subseteq U\) 求出 \((-1)^{|S|-1} \prod_j \left(\min_{u\in S}a_{u,j}+1\right)\),对其 \(\text{FWT}\) 即可求出答案
时间复杂度 \(O(\sum |s_i|+|\sum|2^n+n2^n )\),其中 \(|\sum|\) 为字符集大小
[2025“钉耙编程”中国大学生算法设计暑期联赛(6) 1001] cats 学乘法
存在 \(0\) 时显然答案为 \(0\) 的数量(每个 \(0\) 操作一次,容易配为正数),否则若乘积已经为整数则答案为 \(0\),否则为最小的绝对值加一
时间复杂度 \(O(\sum n)\)
[2025“钉耙编程”中国大学生算法设计暑期联赛(6) 1008] cats 的 max
当 \(k\ge m\) 时显然可以选择 \(m\) 个最大值所在行,答案为 \(\sum_{j=1}^m \max_{i=1}^n a_{i,j}\)
否则令 \(fmx_s=\max_{i=1}^n \sum_{u\in s}a_{i,u}\),转化为选择不超过 \(k\) 个 \(fmx_s\) 使得它们之间无交且总和最大,容易 \(dp\) 解决
时间复杂度 \(O(\sum (n2^m+k3^m))\)
[2025“钉耙编程”中国大学生算法设计暑期联赛(6) 1011] 取模
令 \(cnt\) 为 \(a\) 中不同值的数量
特判 \(cnt\le c\) 的情况
对于一个 \(k\),值域 \([0,m]\) 可根据 \(\lfloor\frac vk\rfloor\mid v\in[0,m]\) 划分为 \(\lfloor\frac mk\rfloor+1\) 段
显然每段内至多有 \(c\) 个数,因此数字数量的上限为 \(c(\lfloor\frac mk\rfloor+1)\),即 \(c(\lfloor\frac mk\rfloor+1)\le cnt\),可得 \(k\le \frac m{\left\lfloor\frac{cnt-1}c\right\rfloor}=O(\frac{mc}{cnt})\)
每个 \(k\) 容易 \(O(cnt)\) 验证,总时间复杂度 \(O(n+mc)\)
[2025“钉耙编程”中国大学生算法设计暑期联赛(6) 1002] 隧道挖掘
先考虑 \(k_2\le k_1\) 的情况
考虑每个 \(a\),对于 \(a\ge k_1\) 的情况,显然只用操作 \(1\) 最优,操作次数为 \(\lceil\frac a{k_1}\rceil\),否则只能用操作 \(2\),要求 \(k_2\mid a\),操作次数为 \(\frac a{k_2}\)
枚举 \(k_1\),容易 \(O(m\ln m)\) 维护 \(\sum_{a\ge k1} \lceil\frac a{k_1}\rceil\),显然 \(k_2\mid \gcd_{a<k_1} a\),因此取 \(k_2=\gcd_{a<k_1} a\) 最优,容易维护 \(\sum_{a<k_1}a\) 和 \(k_2\)
因此这部分时间复杂度为 \(O(m\ln m)\)
然后考虑 \(k_1\le k_2\) 的情况
当 \(a<k_1\) 时显然无法操作,因此 \(k_1\le \min a\),令 \(mn=\min a\)
\(a\ge k_1\) 时,操作次数为 \(\lfloor\frac a{k_2}\rfloor+\lceil\frac{a\bmod k_2}{k_1}\rceil\)
当 \(k_2\le mn\) 时,显然 \(k_1=k_2\) 最优,已经包含在 \(k_2\le k_1\) 的情况中,不再考虑,因此只需要考虑 \(k_2>mn\) 的情况,此时 \(k_1=mn\)
转化为维护 \(\sum_a (\lfloor\frac a{k_2}\rfloor+\lceil\frac{a\bmod k_2}{mn}\rceil)\)
\(\sum_a \lfloor\frac a{k_2}\rfloor\) 容易 \(O(m\ln m)\) 维护,对于 \(\sum_a \lceil\frac{a\bmod k_2}{mn}\rceil\),枚举每个区间 \([l,r]=[k\times mn+1, (k+1)\times mn)\mid k\in\mathbb N\),令 \(c_x\) 为 \(=x\) 的 \(a\) 的数量,则转化为求 \(\sum c_{l\sim l+mn-1}+2\sum c_{l+mn\sim l+2mn-1}+\cdots +\lfloor\frac{r-l}{mn}+1\rfloor \sum c_{l+\lfloor\frac{r-l}{mn}\rfloor mn \sim r}\),预处理 \(sm_l\) 表示 \([l,r]=[l,m]\) 时的答案,容易 \(O(1)\) 计算一个以上形式的和
总时间复杂度 \(O(\sum (n+m\ln m))\)

浙公网安备 33010602011771号