Div.1 vp.
A - String Transformation 1
若初始时存在 $A_i>B_i$ 就无解.
否则贪心,不难发现每种字符最多被改掉一次,从小到大枚举字符 $c$ ,考虑对串 $A$ 中的字符 $c$ 修改,
$A_i=B_i=c$ 的位置是不用改的,对于其他 $A_i=c$ 的位置,全部改成满足 $A_i=c,B_i\neq c$ 中最小的 $B_i$ 即可.
B - GameGame
从高往低考虑每个二进制位,若到某一位时,有奇数个 $a_i$ 在这一位上为 $1$ ,就能分出胜负了,
记有 $t$ 个 $a_i$ 在这一位上为 $1$ ,若 $t\bmod 4=1$ ,则先取 $1$ 就必胜了, 若 $t\bmod 4=3$ ,再讨论下 $n$ 的奇偶性即可.
若每一位都不能分出胜负,则最后为平局.
C - String Transformation 2
建一个有 $|\sum|$ 个点的有向图,对于每个 $i$ ,从 $A_i$ 向 $B_i$ 连边.
问题转化为只加 $k$ 条边,使得每个 $A_i$ 仍能到 $B_i$ ,最小化这个 $k$ ,即操作次数.
图上每个弱连通分量的答案是独立的,对于一个大小为 $s$ 的弱连通分量,有高论,答案为 $2s-1-|{\rm LDAG}|$ .
其中 $|{\rm LDAG}|$ 表示这个弱连通分量中,导出子图是 DAG 的最大子点集大小.
下面是简要证明.
考虑将边逐次加入到图中,并维护每个点 $x$ 所属的某个合法 DAG 子图大小 $siz(x)$ ,记 $sum=\sum siz(x)$.
初始时 $siz(x)=1,sum=s$ ,加入一条边 $u\to v$ 时:
若 $u,v$ 已经弱连通,为了保证不出现环,将 $v$ 从 $u$ 的 DAG 子图中删掉,弱连通分量个数不变,而 $sum$ 减少 $1$ .
否则,可以将两者的 DAG 子图合并,弱连通分量个数减少 $1$ , 而 $sum$ 不变.
最后弱连通分量的个数为 $1$ ,说明有 $s-1$ 条边用于减少弱连通分量个数, $k+1-s$ 条边用于减少 $sum$ .
这说明最后的 $sum$ 为 $2s-1-k$ ,而最大的 $sum$ 就是 $|{\rm LDAG}|$ ,此时 $k$ 最小,为 $2s-1-|{\rm LDAG}|$ .
求每个弱连通分量的 $|{\rm LDAG}|$ 可以用状压 dp 求出每个子点集 $S$ 的导出子图是否为 DAG .
一个 DAG 一定存在拓扑序,按拓扑序顺序加点,若 $S$ 合法,且 $x$ 出边指向的所有顶点与 $S$ 没有交,则 $S\cup \lbrace{x\rbrace}$ 也合法.
D - Rearrange
考虑把所有数从大到小依次填入矩阵中,并且用一个队列维护接下来需要填数的位置,初始时矩阵行列数都是 $0$ .
若下一个数是行 max 或列 max ,就新增一行/一列,将它放在右下角,并从它出发,将其左方 / 上方的位置依次入队.
若它不是行 max 或列 max ,就取出队首的那个位置,将这个数填进去.
这样构造显然能满足行列 max 的限制.
对于一行来说,新增它的时候保证了左侧是递增的,而右侧一定是一列一列加入,是递减的,一定合法,同理,列也合法.
E - Strange Operation
如果要在最后的串中加入 $k$ 个 $0$ ,则一定是由原串中长度 $\ge k$ 的全为 $0$ 的某个子串合并来的.
如果要在最后的串中加入 $k$ 个 $1$ ,则一定是由原串中 $1$ 的个数 $\ge k$ 的某个子串合并来的.
以此为依据不难设计出线性的 dp ,注意对于不同合并方法,若最后串相同就只算一次,所以要钦定一些转移避免算重.
F - Special Edges
复杂度看上去很神必,明天再说.