2024.10.24 test
B
可以将一列的算式看成 \(u\to v\) 的一条边,其中 \(u\) 表示其所需要的进位,\(v\) 表示其进位。
那么不难发现我们要求的是 \(0,1,2\) 三个点,\(0\to 0\) 的欧拉回路个数,其中最后一条边满足都不是 \(0\)。
考虑 best 定理,其中求生成树个数可以直接枚举树的形态,设生成树个数为 \(T_0\)。
考虑把最后一条边改为第一条边,将图反向即可,设第一条边能走的个数为 \(s\)。
设出度为 \(od_i\),最后答案就是是 \(T_0\times s\times (od_0-1)!\times(od_1-1)!\times (od_2-1)!\)。
C
定义长度为 \(n\) 的字符串是合法的,当且仅当存在一个长度为 \(n\) 的合法括号序,满足匹配括号对应字符串中的字符相同。现在有一个长度为 \(n\) 的字符集为 \(\{a,b,c\}\) 的字符串 \(s\),问有多少种交换两个不同位置上不同字符的方法,使得得到的字符串是一个合法的字符串。\(n\le 10^5\)。
这个题牛。考虑给 \(a,b,c\) 随机给一个 \(2\times 2\) 矩阵,利用矩阵乘法的结合律处理括号匹配。
我们把作为左括号出现的赋 \(a,b,c\),右括号的赋 \(a^{-1},b^{-1},c^{-1}\),那么合法的情况就是顺序乘出来为 \(I\)。
考虑交换两个字符所带来的影响,交换 \(l,r\) 无非就是将 \([l+1,r-1]\) 的 \(1\) 变为 \(-1\),\(-1\) 变为 \(1\)。
所以预处理一些东西即可。