The 3rd Universal Cup. Stage 15: Chengdu

本题解由无敌坦克手贝塔撰写。


A

By misaka_sama。

给一个长度为 nn 的由 '-' 和 '>' 构成的字符串 ss,一开始你有一个空的串 tt,每次你可以选出 tt 的一个长度为 x (x5)x \space (x\ge 5) 的子串,并将这个子串的内容覆盖成一个 '>' ,x4x-4个 '-' 和 33 个 '>' 拼接而成的串。至多进行 nn 次操作,构造一种方案使得 sstt 相等。


ss 分成 '>' 和 '-' 构成的若干连续段,如果第一段或最后一段是 '-' 则无解,同时最后一段 '>' 的长度 2\le 2 也无解。

先把最后一段填成 '>' ,记最后一次填的位置为 pp,然后依次从 11p1p-1 遍历串 ss,如果遇到一个 '>' 就覆盖 [i,p][i,p]

B

By AbsMatt。

dpi,j,k,0/1/2dp_{i,j,k,0/1/2} 表示前 ii 个中花钱购买了 jjakkbsijks_i-j-kc,上一个位置是 0/1/20/1/2 的方案数,sis_i 表示前 ii 个字符中 ? 的个数。 不难写出 O(n3)O(n^3) 的 DP 转移。

最后给 dp 数组写一个三维前缀和(O(n3+q)O(n^3+q))或二维前缀和(O(n3+nq)O(n^3+nq))预处理答案。

E

By misaka_sama , AbsMatt。

给一棵树,qq 次询问有多少连通块包含 uuvv 路径的点。


考虑 uuvv 路径上除 lca 之外的点,它们的贡献可以通过钦定它们为所在连通块中深度最小的点计算。设 fuf_u 表示 uu 子树内以 uu 为根的连通块数量,有转移 fu(fv+1)f_u \gets \prod (f_v+1)

然后是 lca 的贡献,其实就是包含 lca 的连通块数量,可以换根解决。

有可能出现 fu+1f_u+1 取模后为 00 的情况,所以不能求逆。设 gug_u 表示去掉 uu 的子树后包含 uu 的父亲的连通块数量,通过维护每个点儿子的 fv+1f_v+1 的前缀积和后缀积做类似 ff 的转移就能求出 gg 。然后包含 uu 的连通块数量也能同理求出。

G

By misaka_sama,AbsMatt。

给一个序列 aa,每次可以在 aia_iai+1a_{i+1}之间插入 aiaja_i \oplus a_j,其中 \oplus 可以是与,或,异或。问最多能有多少不同的数。


首先每两个相邻的数是独立的,然后不断在 aia_iai+1a_{i+1} 之间插入aixorai+1a_i \operatorname {xor} a_{i+1} 可以得到很多个相邻的 aia_iai+1a_{i+1},这样一看就很优。

然后你可以不断用三种位运算组合出一堆数,这最多有 O(1)O(1) 种,手算一下只有 aorba \operatorname{or} baandba \operatorname{and} baxorba \operatorname{xor} baxor(aorb)a \operatorname{xor} (a \operatorname{or} b)axor(aandb)a \operatorname{xor} (a \operatorname{and} b)00

I

By misaka_sama,AbsMatt。

维护一个序列,单点修改,查询有多少个 knk \le n 使得将原序列按照 kk 的长度分块后(最后一块的长度可能不足 kk)每一块内元素单调不减。


xx 是满足 [1,x][1,x] 单调不减的最大的 xx,那么 kk 一定能整除 xx。同理可以得到 kk 必须整除每一个连续段的长度(除最后一段)。那么答案就是除了最后一段的所有段的长度 gcd\gcd 的因数个数。

对于每个位置维护它所在的上升段的左右端点,修改分讨加线段树打标记就行。

J

By cyz2010。

签到题。按照题意模拟即可。

注意下一场比赛开始后当前比赛立刻结束。

K

By cyz2010。(赛后过的)

aia_iaia_i 所有因数连边,形成一个 DAG,初始时每个 aia_i 上有一颗棋子。

每轮操作形如把一颗棋子移动一条路径,棋子不能重叠。

引理 1:存在一种最有操作使得每个棋子只会被操作一轮。

证明:如果操作了两轮,合并显然不劣。

引理 2:如果当前棋子所在点 uu没被占用的出点 vv,留在原地一定不优。

证明:结合引理 1,留在原地只会挡住其他棋子。

由引理 1,2,整个过程可以看作 aia_i 到其因数 did_i 的一个匹配。匹配的权值为 val(ai,di)val(a_i,d_i),即 aidia_i \rarr d_i最多操作次数

建模二分图。左部点 aia_i 向右部点 aia_i 的所有因数 dd 连边,边权为 val(ai,d)val(a_i,d)

由于因数个数是 V\sqrt{V} 级别,所以只取前 300300 小因数连边。

跑二分图完美最大权匹配,边数点数 n2n^2,费用流 O((n2)3)O((n^2)^3),实测跑飞快。

L

By AbsMatt。

签到中的签到。直接输出 5050 个 a,4545 个 b,44 个 c,和 11 个 inf。