「Codeforces gym 102268K」Knowledge 题解
奥妙重重的结论题。
顺着官方题解去找,能在 wiki 上找到一个叫「四面体空间对称群」的东西。发现有一堆意味不明的申必记号,但还是有一张人能看懂的图。
如果你立体几何好的话,你就会发现把其中一个旋转 \(180^\circ\) 的操作当作本题的 \(\texttt{a}\),把其中一个旋转 \(120^\circ\) 的操作当作本题的 \(\texttt{b}\),就是本题在干的事:(以下叙述以左上角的 \(180^\circ\) 旋转为 \(\texttt{a}\),以绕 \(z\) 轴旋转 \(120^\circ\) 为 \(\texttt{b}\))
\(\texttt{aa}\) 和 \(\texttt{bbb}\) 显然是转回去了,模拟一下 \(\texttt{ababab}\) 也会转回去,也就是说同一个等价类可以任意加入/删除这三个字符串,这是和我们的要求等价的!
同时这两个操作是可以组合成任意一种图中的操作的,手动模拟一下就能发现(以右上角开始顺时针描述各个四面体的状态,分别为:\(\texttt{a},\texttt{babb},\texttt{bbab},\texttt{ab},\texttt{bb},\texttt{bab},\texttt{abb},\texttt{ba},\texttt{aba},\texttt{b},\texttt{bba}\),还有正中间的状态为 \(\varnothing\))。
然后就找一下每个等价类加上 \(\texttt{a}\) 和 \(\texttt{b}\) 会转移到哪个等价类,做一遍矩阵快速幂,就能得到长度为 \(n\) 的字符串中每个等价类的大小。
1 |
|
「Codeforces gym 102268K」Knowledge 题解
https://blog.seniorious.cc/2021/cfgym-102268-K/