DigestedSet

There's nothing actually digested.

0%

2017 Multi-University Training Contest - Team 1

frustrating process

1001 and 1011 is solved instantly, however, I failed to notice a critical feature in 1002, and stuck on it for hours, no need to say that other problem is too difficult for me.

1006. Function

考虑置换 $a$ 的一个循环节,长度为 $l$ ,那么有 $f(i) = b_{f(a_i)} = b_{b_{f(a_{a_i})}} = \underbrace{b_{\cdots b_{f(i)}}}_{l\text{ times }b}$ 。

那么 f(i)f(i) 的值在置换 bb 中所在的循环节的长度必须为 ll 的因数。

而如果 f(i)f(i) 的值确定下来了,这个循环节的另外 l1l - 1 个数的函数值也都确定下来了。

答案就是 i=1kjlijcalj\sum_{i = 1}^{k} \sum_{j | l_i} {j \cdot cal_j} 改为 i=1kjlijcalj\prod_{i = 1}^{k} \sum_{j | l_i} {j \cdot cal_j} ,其中 kk 是置换 aa 中循环节的个数, lil_i 表示置换 aa 中第 ii 个循环节的长度, caljcal_j 表示置换 bb 中长度为 jj 的循环节的个数。

时间复杂度是 O(n+m)\mathcal{O}(n + m)