做题记录 25.4.19
\(\textcolor{blue}\odot\) CF2086E Zebra-like Numbers
令 \(t_i=4t_{i-1}+1\) 表示第 \(i\) 个斑马数,显然 \(10^{18}\) 内至多只有 \(30\) 个
假设正整数 \(x\) 的斑马数拆分为 \(\sum_{i=1}^{30} v_it_i\),显然最优情况下 \(v_i\le 4\),否则不如令 \(v_{i+1}\) 加一
且若存在 \(v_i=4\),则 \(v_{i-1\sim 1}=0\),否则不如换成 \(t_{i+1}\)
每个询问 \([l,r,k]\) 拆为 \([1,r]-[1,l-1]\),转化为询问一个前缀内拆分数量为 \(k\) 的数字数量
考虑数位 \(dp\),令 \(dp_{i,0/1,j,0/1}\) 表示目前考虑 \(i\sim 30\) 位,这些位的取值是否紧贴上界,这些数位的和为 \(j\),是否出现过 \(4\)
显然 \(dp_{\ast,\ast,j,\ast}=0~\text{if}~j>k,dp_{0,\ast,k,\ast}=1\)
对于一个 \(dp_{i,t_1,j,t_2}\),令 \(ct_i\) 表示右端点的斑马数拆分下第 \(i\) 位的值,令 \(lm=\begin{cases}0&t_2=1\\ct_i&t_1=1,t_2=0\\4&\text{otherwise}\end{cases}\) 表示第 \(i\) 位的上限,则转移为
显然 \(i\) 和 \(j\) 的最大值都是 \(O(\log V)\) 的,因此时间复杂度 \(O(T\log^2 V)\)
\(\textcolor{purple}\odot\) CF2071F Towering Arrays
二分答案,设二分的值为 \(M\),令 \(b_i=M-a_i\),则转化为判定是否存在长度 \(\ge n-k\) 的子序列,满足其中一个位置 \(\ge 0\),这个位置向前依次 \(\ge 1,\ge 2,\cdots\),这个位置向后依次 \(\ge 1,\ge 2,\cdots\)
令 \(f_i\) 表示 \(1\sim i\) 中选择一个子序列,使得选出的倒数第 \(i\) 个数 \(<i\),可以得到的最大长度,\(g_i\) 表示 \(i\sim n\) 中选择一个子序列,使得选出的第 \(i\) 个数 \(<i\) 所能得到的最大长度,则合法当且仅当 \(\exists i,(b_i\le 0,f_i+g_i-1\ge n-k)\)
\(f\) 和 \(g\) 计算方式类似,考虑如何计算 \(f\)
发现从 \(f_{i-1}\) 到 \(f_i\),一定存在一种最优情况使得后者选择的位置为前者的超集
用一棵线段树维护 \(b\),从前往后扫描,设目前扫描到 \(i\),则线段树中 \((i,n]\) 值为 \(\infty\),\([1,i]\) 中选择的位置处值为 \(\infty\),第 \(i-1\) 个选择的位置和第 \(i\) 个选择的位置之间,线段树 \(p\) 位置保存了 \(b_p-i\)
对于每个 \(i\),先令 \(i\) 位置赋值为 \(b_i\),然后每次找到最后一个 \(\le 0\) 的位置,将其设为 \(\infty\),并将其对应前缀减一,选择的集合大小加一
使用线段树上二分,则时间复杂度为 \(O(n\log n\log V)\)
\(\textcolor{blue}\odot\) CF2071D2 Infinite Sequence (Hard Version)
令 \(s_i=\bigoplus_{j=1}^i a_j\)
根据 \(a\) 的定义,对于 \(x>\frac n2\),显然有 \(a_{2x}=a_{2x+1}=s_x\)
若 \(n\) 为偶数则算出 \(a_{n+1}\) 后令 \(n\gets n+1\)
令 \(P=s_n\)
处理出 \(a_{n+1\sim 2n+1}\) 及 \(a_{1\sim 2n+1}\) 前缀和,这样对于 \(i>2n+1\),必有 \(\lfloor \frac i2\rfloor>n\),形式统一
对于 \(4k>2n+1\),考虑相邻四个数 \(a_{4k},a_{4k+1},a_{4k+2},a_{4k+3}\),显然有
由此容易 \(O(\log V)\) 计算一个 \(a_V\)
一组询问 \([l,r]\) 差分为 \([1,r]-[1,l-1]\),令 \(S(x)\) 表示前缀 \([1,x]\) 的答案,\(x\le 2n+1\) 的情况直接返回即可,若 \(x>2n+1\),先补齐至 \(x\equiv 3\pmod 4\),此时显然有
一共有 \(al=\frac{x-(2n+1)}4\) 组,令 \(ct\) 为 \(a_{n+1},a_{n+3},\cdots,a_{\frac{x-3}2}\) 中 \(1\) 的数量,对于 \(a_\ast=1\) 的组 \(2(p\oplus a_\ast)+2p=2(p\oplus1)+2p=2\),对于 \(a_\ast=0\) 的组 \(2(p\oplus a_\ast)+2p=2p+2p=4p\),因此 \(S(x)=S(2n+1)+ct\times2+(al-ct)\times 4p\)
考虑如何计算 \(ct\),显然
于是递归即可
时间复杂度 \(O(\sum \log^2 V)\)
\(\textcolor{purple}\odot\) CF2084G1 Wish Upon a Satellite (Easy Version)
与 \(f\) 相对地,定义 \(g(s)\) 表示交换先后手之后的最终值
结论为:
可归纳证明
于是答案为
问题转化为求 \(\sum_{1\le i\le j\le n}[i\not\equiv j\pmod 2]|p_i-p_j|\) 的最小值
转化为 \(n\) 个点分别在 \(1\sim n\),将其中 \(\lceil\frac n2\rceil\) 个染为黑色,剩余染为白色(黑色的点编号为奇数,白色为偶数,点 \(i\) 位置在 \(p_i\),显然合法染色方式可对应到至少一个 \(p\),且每个 \(p\) 都可对应到一种染色方式),最小化每一对异色点之间的距离和
考虑 \(dp\),令 \(dp_{i,j}\) 表示 \(1\sim i\) 中有 \(j\) 个黑色点,这 \(i\) 个点内部及这 \(i\) 个点向后的贡献之和的最小值
转移时枚举当前点颜色,考虑当前点向后和向前的贡献
时间复杂度 \(O(\sum n^2)\)

浙公网安备 33010602011771号