Loading

[笔记] 定义新运算

问题概述

有些题目会给出一些条件转移,然后要求若干次转移的结果。

处理方式

用更加形式化的运算来表示题目的转移,有时候会让问题变简单。

习题

[YZOJ] 7131 未来

给出长度为 \(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)\).

posted @ 2022-03-11 20:55  IrisT  阅读(115)  评论(0编辑  收藏  举报