ABC Ex 选做

· · 个人记录

杂话选说:

我会喷火,你会吗?

按照题号顺序进行排列。

ABC212H

求所有长为 n1 \le a_i \le m 的序列中,有多少异或和为 0 的。n \le 2\times 10^5,a_i <2^{16}

暴力转移是显然的,考虑你转移实际上是不断与 b_i=1 做 FWT 的过程,但你显然不能做 k 次 FWT,你先把 b_i=1 的部分做掉,发现等价于 a_i 进行 FWT 之后对系数进行对应等比数列的变换后 IFWT 回来即可。

submission

ABC218H

n 盏灯,你需要让恰好 k 盏亮。若 ii+1 颜色不同,获得 a_i 的贡献,求最大贡献,n \le 2 \times 10^5

不妨 x \le \dfrac{n}{2} ,考虑进行 wqs 二分,显然让 x 盏亮的贡献 f(x) 是凸的,应用 wqs 二分多加个权值,内层 dp 直接维护上次状态即可。注意区分到底选的是亮还是不亮。

submission

ABC219H

直接复制了原题面。

在一条数轴上有 N 支蜡烛,第 i 支蜡烛长度为 A_i,且位于数轴上的 X_i 处。

时刻 0 时,N 支蜡烛都被点燃。一根点燃的蜡烛每过一时刻就会减少 1 的长度。当长度变为 0 时蜡烛将会熄灭。熄灭的蜡烛的长度不会减少。

时刻 0 时,你位于数轴上的 0 处。一时刻中你可以在数轴上左右移动不超过 1 的单位距离。当你到达某支蜡烛所在的位置时,你可以选择熄灭这支蜡烛,熄灭蜡烛的时间忽略不计。如果有多支蜡烛位于同一个位置,你可以一次性熄灭该位置上的所有蜡烛。

求时刻 10^{100} 时最大的蜡烛总长度,n \le 300

大神题。考虑令 dp_{l,r,k,p} 表示当前处理到 [l,r] 区间的蜡烛,时刻为 k 当前走到左侧/右侧的最大长度,转移是简单的。但是带时间维肯定做不了,考虑优化,你发现这个过程等价于每过一个时刻减去没走过的且最终会被计入答案中的蜡烛数量,把这一维计入状态中,转移时枚举新的一位是否最终被计入答案即可。复杂度 O(n^3)

submission

ABC221H

给定 n,m,对于每个 1\le k\le N,求长度为 k,序列总和为 n,且每个数的出现次数不超过 m 的序列个数。n,m \le 5\times 10^3

考虑直接 dp 显然没前途,对于这种拆分数形态的东西,考虑进行添加 0 和全局加 1 的操作,对应的转移分别为 dp_{i,j}=dp_{i-1,j}dp_{i,j}=dp_{i,j-i} ,容易证明这和直接 dp 等价。考虑有出现次数的限制时,这等价于第一种转移至多连续做 m 次,你额外记一个 f_{i,j} 表示钦定上次进行的为 2 转移即可。

submission

ABC223H

区间询问 q 次,每次查 a_l \dots a_r 中的数是否能异或出 kn \le 4 \times 10^5,q \le 2 \times 10^5,a_i < 2^{60}

线性基,首先什么 ST 表,猫树一类的肯定没戏,考虑你在线性基每一位记录 t_i 表示上一次被插入是什么时候,然后你查询在对应的 r 上只考虑 t_i \ge l 的即可。具体的,插入先复制一遍原来的,然后如果遇到编号更小的直接交换,不影响正确性。

submission

ABC228H

有两个长为 n 的序列 a_ic_i ,你可以付出 c_i 的代价将 a_i +1 ,最后再付出 kx 的代价,xa_i 的种类数。求最小代价,n \le 2 \times 10^5,a_i \le 10^6

先放到桶上,最终的答案一定是分成若干段,将每段的数都移到末尾,可以列出 O(n^2) 的 dp 式。注意到 dp 形如 dp_i=\min(dp_j+s(j,i)) 的形式,考虑进行斜率优化,推成啥我也忘了,反正就是可以做。。。

submission

ABC236H

给定 n,m 序列 d_i ,求满足 1 \le a_i \le md_i \mid a_ia_i 互不相同的序列个数。n \le 16

考虑容斥,令 dp_S 表示 S 集合的答案,转移枚举相等的集合 T ,方案为 \lfloor \dfrac{m}{\operatorname{lcm} a_i}\rfloor ,然后考虑容斥系数 V(S) 。显然容斥系数只与 |S| 有关,满足 \sum \limits_{t_1+\dots +t_k=n} (\prod V(t_k))=[n=1] 。可以直接枚举拆分数暴力去求,也可以打表发现 V(n)=(-1)^{n-1}(n-1)! 。复杂度 O(3^n)

submission

ABC237H

一个字符串 S ,你要选出尽可能多的回文子串,满足选出的串之间互不为子串。n \le 200

大神题。重要结论是本质不同回文子串不超过 n 个,考虑在末尾加入新字符时,若出现了两个新回文串,那么短的那个在长的那个上的对称一定已经出现过。对字符串随便哈希一下,将有子串关系的 x,y 建边,原问题等价于最长反链,即最小链覆盖,在 DAG 上又等于最小链划分,这是经典问题,可以转化为二分图最大匹配求解。

submission

ABC240H

给定一个长度为 n 的 01 串,求最多可以选出多少互不相交的子串,字典序严格升序。

大神题。首先考虑 O(n^2 \log n) 做法,将所有串拉出来在 trie 上排序,然后相当于要求 r_i < l_{i+1} 这样,类似于做 LIS,使用 BIT 维护即可。

接下来考虑首先每个子串至多比上一个长 1 ,而最终最多有 \sqrt{2n} 个子串,因此最长的子串也不会超过 \sqrt{2n} 。所以只需要将长度 \le \sqrt{2n} 的子串进行计算即可。复杂度 O(n\sqrt {n \log n})

submission

ABC242H

复制了原题题面。

m 个小球,一开始标号为 1\sim m,每个对应一个区间 [L_i,R_i]。有 n 个方块,标号 1\sim n,初始时无色。重复以下步骤直到所有的方块都被涂色:

  1. 随机拿出一个小球 i
  2. [L_i,R_i] 涂色
  3. 将小球放回去

问期望进行步骤的次数。

首先 min-max 容斥,转化为 \sum \limits_{S} (-1)^{|S|+1}E(S) ,其中 E(S) 表示 S 被第一次覆盖的时间,这只与与 S 相交的区间个数有关。令 dp_{i,j,k} 为选到 i 位,相交个数为 j|S| 的奇偶性为 k 的方案数,枚举上一个被选到的位置再预处理出这段区间内相交的个数进行 dp 即可。复杂度 O(n^3)

submission

ABC246H

定义一个 01? 字符串的权值为将 ? 任意替换为 01 后的本质不同子序列个数,q 次修改,每次求出修改后的权值。

奶龙题。令 f_i 表示以 0 结尾的字符串数量,g_i 表示以 1 结尾的字符串数量,则有

分别代表 01? 的转移。可以写成矩阵的形式,然后用线段树维护一下就做完了。

submission

ABC248H

给定排列 p ,求满足极差减长度 \le k 的子段数量。

首先 $k$ 的范围是诈骗。考虑分治,每次求出左边对右边的贡献,令 $a_i,b_i,c_i,d_i$ 分别为两边的前缀 max/min ,等价于 $\max(a_i,c_j)-\min(b_i,d_j) \le i+j+k$ 的方案数,钦定 $a_i\ge c_j$ 后分讨 $b_i$ 与 $d_j$ 可以转化为二维数点,扫描线即可。 [submission](https://atcoder.jp/contests/abc248/submissions/60686241) ### ABC252H 有 $c$ 个盒子,每个盒子有一些球,共有 $n$ 个球。每个球有权值,求选出 $m$ 个不在同一盒子中的球,权值异或值中第 $k$ 大的。 $n \le 70$ 。 大神题。总方案数不会超过 $3^{\frac{70}{3}} \approx 1.35 \times 10^{11}$,考虑折半搜索,尽量均匀的分成两半,暴力求出每一半的方案,然后等价于 $a_i \oplus b_j$ 的第 $k$ 大,直接建 trie 树二分 $\log^2 V$ 可能过不去,逐位确定即可。均分时可以随机 $10^5$ 次,选最接近的作为分类标准。 [submission](https://atcoder.jp/contests/abc252/submissions/60673989) ### ABC253H 复制了原题题面。 给定 $ n $ 个点无边的图,给定 $ m $ 条待选的无向边。每次等概率地从 $ m $ 条边中抽取一条边加入图中。 $ n - 1 $ 次询问求加 $ 1, 2, \cdots, n - 1 $ 次边后原图形成一个森林(一棵树亦为森林)的概率为多少。对 $ 998244353 $ 取模。 $n \le 14, m\le 500$ 。 考虑容斥,令 $dp_{S,i}$ 表示 $S$ 集合经过 $i$ 步后成为森林的方案数,转移枚举新扩展的树(需要钦定一个点被选),令 $f_S$ 表示 $S$ 集合成为树的方案数,考虑转移枚举其由哪两个子树加一条边连成(不钦定点)除以重复计算次数 $2(|S|-1)$ 乘上连边方案数 $g(S,T)$,后者可以简单计算。注意没有定 $i$ 步的顺序,因此答案还要乘上 $i!$ 。复杂度 $O(3^n)$ 。 [submission](https://atcoder.jp/contests/abc253/submissions/60636836) ### ABC254H 复制了原题题面。 给定大小为 $ n $ 的集合 $ A $ 和 $ B $,你可以对集合 $ A $ 中的元素 $ a_i $ 进行两种操作,分别为 $ a_i \leftarrow \lfloor \dfrac{a_i}{2} \rfloor $,和 $ a_i \leftarrow a_i \times 2 $。你需要操作集合 $ A $ 直至集合 $ A, B $ 完全相同。求最小操作次数,若无解输出 `-1`。 奶龙题。先将 $a_i \leftarrow a_i \times 2$ 的操作转化为 $b_i$ 为偶数时 $b_i \leftarrow \lfloor \dfrac{b_i}{2} \rfloor$。这时 $a,b$ 只会减小,维护 $a_i$ 与 $b_i$ 的最大值 $A,B$,分类讨论即可。使用优先队列,最多进行 $n \log n$ 次操作,复杂度 $n \log^2 n$ 。 [submission](https://atcoder.jp/contests/abc254/submissions/58851529) ### ABC257H 有 $n$ 个骰子,每个骰子上有 $6$ 个数 $a_{i,j}$ ,还有花费 $c_i$ ,你要选出 $m$ 个骰子,定义价值为选出骰子上的数之和的平方减去代价之和,求最大期望价值。$n\le 10^3$ 。 大神题。先推式子, $E((\sum a_i)^2)-\sum c_i=E(\sum \limits_{i\neq j}a_ia_j)+E(\sum a_i^2)-\sum c_i=\sum \limits_{i\neq j}E(a_i)E(a_j)+E(\sum a_i^2)-\sum c_i=(\sum E(a_i))^2-\sum (c_i+E(a_i)^2-E(a_i^2))$ 。 令后面等于 $b_i$ ,则原问题等价于选若干个 $a_i$ ,最大化 $(\sum a_i)^2-\sum b_i$ 。考虑将所有方案放到二维平面上,此时等价于 $y=b-x^2$ 的抛物线接触一点时,$b$ 的最大值。此时该点一定位于切线上,枚举切线斜率后只需要找出最大的 $ka_i-b_i$ 最大的 $m$ 个点即可。我们没法枚举斜率,但会导致变化的斜率一定是 $ka_i-b_i$ 与 $ka_j-b_j$ 大小关系反转的时候,最多只有 $O(n^2)$ 个值,用这些值计算即可。初始时钦定 $a_i$ 升序排序,复杂度 $O(n^2 \log n)$ 。 [submission](https://atcoder.jp/contests/abc257/submissions/60651731) ### ABC258H 给定 $n,m$ ,序列 $a_i$ ,求长度任意,总和为 $m$ ,元素均为奇数,前缀和序列中不出现任何一个 $a_i$ 的序列数。 $n \le 10^5,m \le 10^{18}$ 。 奶龙题。设 $dp_i$ 为总和为 $i$ 的方案数,则 $dp_i=dp_{i-1}+dp_{i-3}+\dots $,$dp_{a_i}=0$。 令 $s_i=s_{i-1}+s_{i-3}+\dots,t_i=t_{i-2}+t_{i-4}+\dots$ ,则 $dp_i=s_i,s_{i+1}=dp_i+t_i,t_{i+1}=s_i$ 。 可以列出矩阵转移,特殊处理 $a_i$ 的部分。 时间复杂度 $O(n \log m)$ 。 [submission](https://atcoder.jp/contests/abc258/submissions/60632381) ### ABC259H $n \times n$ 的方格,每个格有颜色,只能向下或向右走,求起点与终点相同的路径条数。$n \le 400$ 。 令 $i$ 颜色出现次数为 $c_i$ ,枚举路径的起点终点,计算组合数可以做到 $\sum c_i^2$。考虑 $c_i$ 很小怎么做,只保留颜色为 $c_i$ 的点,做 $dp_{i,j}=dp_{i,j-1}+dp_{i-1,j}$ 的 dp 可以做到 $n^2$ 。对 $c_i \le n$ 的点做 $c_i^2$ 的做法,$c_i \ge n$ 的不会超过 $n$ 个,做 $n^2$ 的做法,总复杂度 $O(n^3)$ 。 [submission](https://atcoder.jp/contests/abc259/submissions/36538357) ### ABC261H 复制了原题题面。 Takahashi 和 Aoki 正在一张 $n$ 个点,$m$ 条边的带权有向图上玩游戏。游戏规则如下: - 有一颗最初在 $s$ 点的棋子。双方轮流移动这颗棋子,Takahashi 先手。 - 每一次移动都可以使棋子从边的一端移动到另一端。如果无法移动,也就是不存在出边时,游戏结束。 - 定义一局游戏的得分为棋子移动路径上的边权之和。如果经过一条边多次,边权也计算多次。 Takahashi 想要最小化游戏的得分,但 Aoki 想要最大化得分。请输出在最优策略下游戏的最终得分。特别地,如果游戏无法结束,请输出 `INFINITY`。 $1\le n\le 2\times 10^5,\ 0\le m\le 2\times 10^5$。有向图保证没有重边和自环,但 **不保证无环**。 考虑图是 DAG 时直接 dp 即可,令 $f_i$ 与 $g_i$ 分别为先手/后手时的答案,转移是简单的。 考虑有环的时候怎么做,发现 $f_i$ 转移取的是 min ,可以类似 dij 做,能转移就转移,而 $g_i$ 需要计算完所有出边之后计算,像拓扑排序那样转移即可,若最终 $f_i$ 未得到转移,则答案为 INFINITY。 [submission](https://atcoder.jp/contests/abc261/submissions/60654708) ### ABC262H 求长度为 $n$ ,$0 \le a_i \le m$,且满足给定的 $q$ 个要求,每个要求形如 $\max \limits_{l_i \le j \le r_i} a_j = k_i$ 的序列个数。$n \le 2 \times 10^5$ 。 首先预处理出 $c_i$ 表示 $a_i$ 的最大值。不同的 $c_i$ 之间独立,考虑对每种 $c_i$ 单独考虑,最后乘上没被覆盖部分的贡献即可。 此时问题等价于有若干 $l_i,r_i$ 表示区间内必须至少选一个点,每个没选的点有 $x-1$ 的贡献,选了点有 $1$ 的贡献。 考虑令 $dp_c$ 为上次选的位置为 $c$ 的答案,新加 $i$ 位时将 $dp_c := (x-1)\times dp_c$ ,$dp_i:=\sum \limits_{j<i} dp_j$ 并将 $c\le L$ 的 $dp$ 值设为 $0$ 。可以直接记录全局乘法标记,全局和,删除时暴力清空标记做到线性。 注意特判无解。复杂度 $O(n \log n)$。 [submission](https://atcoder.jp/contests/abc262/submissions/60605475) ### ABC264H 复制了原题题面。 我们有一颗以 $1$ 为根的有根树。 对于每一个 $2 \le i \le n$ 的 $i$,它的父亲是 $p_i$。 我们随机选一些编号在 $1$ 到 $k$ 的点,钦定节点 $1$ 一定被选中,一共有 $2^{k-1}$ 种选择方法。 现在芷萱姐姐想知道,当 $k=1,2,\cdots,N$ 时,有多少种选择方法,使得所选顶点的诱导子图是一颗以 $1$ 为根的完美二叉树(Perfect Binary Tree)。请输出答案对 $998244353$ 取模的结果。$n \le 3 \times 10^5$ 。 奶龙题。首先只需要保留深度 $\le 19$ 的点。考虑令 $dp_{i,j}$ 表示以 $i$ 为根的深度为 $j$ 的满二叉树个数。$dp_{i,j}=\sum \limits_{i \neq j} dp_{u,j-1}dp_{v,j-1}=(\sum dp_{u,i-1})^2-\sum dp^2_{u,i-1}$,其中 $u,v$ 为 $i$ 的直接儿子。 考虑依次加点,每次加点只会对到父亲的路径上对应深度的 dp 值产生变化,每次变化时 $O(1)$ 记录向上的贡献,可以做到 $O(n\log n)$ 。统计答案也是简单的。 [submission](https://atcoder.jp/contests/abc264/submissions/60601027) ### ABC283H 给定 $n, m, r$,求出 $$\sum_{i\bmod m = r}^n \operatorname{popcount}(i)$$ 多测,$T \le 10^5$ 。 考虑拆贡献,枚举 $i$ ,贡献为 $\sum \limits _{j=0}^k \lfloor \dfrac{mj+r+2^i}{2^{i+1}}\rfloor-\lfloor \dfrac{mj+r}{2^{i+1}}\rfloor$ ,可以使用类欧求解,复杂度 $O(T \log^2 n)$ 。 [submission](https://atcoder.jp/contests/abc283/submissions/60827096) ### ABC288H 给定 $n,m,x$ ,求长度为 $n$ ,单调不降且最大值不超过 $m$ ,异或和为 $x$ 的序列个数。$n \le 200,m,k <2^{30}$ 。 大神题。考虑令 $f_i$ 为 $a_i$ 没有大小关系的方案数,可以在 $O(n^3 \log x)$ 的时间内求出。具体的,令 $dp_{i,j,k}$ 为有 $i$ 个值,$j$ 个顶到上限,当前考虑到 $k$ 位的种数。转移分讨 $m$ 这一位的情况是简单的。 令 $g_i$ 表示没有重复的情况,由于重复的一定成对出现,因此答案为 $\sum \limits_{i=0}^\frac{n}{2} \dfrac{g_{n-2i}\binom{m+i}{i}}{(n-2i)!}$ 。 考虑如何计算 $g_i$ ,我们令 $a$ 为出现奇数次的个数,$b$ 为出现奇数次的种类数,$c$ 为出现偶数次的种类数,则有重复当且仅当 $b<i$ ,对应的方案数为 $\binom{i}{b}x_{a,b}y_{i-a,c}\prod \limits_{p=1}^{c} (m-b+2-p)$ 。组合意义很好理解。 $x,y$ 可以 $O(n^3)$ 求,将上式的 $c$ 与 $y$ 合并后也可以 $O(n^3)$ 求 $g_i$ ,因此总复杂度 $O(n^3 \log x)$ 。 [submission](https://atcoder.jp/contests/abc288/submissions/60831686)