[笔记] 定义新运算
问题概述
有些题目会给出一些条件转移,然后要求若干次转移的结果。
处理方式
用更加形式化的运算来表示题目的转移,有时候会让问题变简单。
习题
给出长度为 \(n\) ,字符集大小为 \(3\) 的字符串 \(S\),每次的变化为:
若 \(S_i=S_{i+1}\),\(S_i\) 不变,否则 \(S_i\) 变为 \(S_i\) 与 \(S_{i+1}\) 以外的那个字符。
问 \(m\) 次变化的结果。
题解
考虑字符看成数字,那么就是要:
0 ⊕ 0 = 0
1 ⊕ 1 = 1
2 ⊕ 2 = 2
0 ⊕ 1 = 2
0 ⊕ 2 = 1
1 ⊕ 2 = 0
发现就是 \(a\oplus b=-(a+b)\bmod 3\).
然后推系数发现是杨辉三角,且在模 \(3\) 意义下,每 \(3^k\) 次转移,就只有 \(i\) 和 \(i+3^k\) 的位置系数不为 \(0\).
于是可以直接 \(3\) 进制拆分做,时间复杂度 \(O(n\log m)\).