A A A
- 考虑求出循环节后就可以取模了
直接 b s g s bsgs bsgs O ( T p ) O(T\sqrt p) O(Tp) 可以得到 60 p t s 60pts 60pts
数列类似斐波那契,循环节可以直接求,证明
复杂度 O ( T k p ) O(Tk\sqrt p) O(Tkp) 甚至可以 O ( T k p 1 / 4 ) O(Tkp^{1/4}) O(Tkp1/4), C o d e Code Code
B B B
- 考虑一个组合意义,即确定排列和划分过后,每一段选择一对,若所有对都构成逆序对则产生 1 的贡献,对每个都为逆序对的概率进行计数,奇数位和奇数位的贡献可以简单计算,问题就是如何考虑偶数位和奇数位的贡献
按大小关系可以建边,小的连向大的,那么偶数位可以串成一条链
奇数位的贡献可以看成链上挂了若干个连入和连出的边,连出的边是没法搞的,按照氪金手游容斥
考虑这颗内向树它合法的概率,钦定根为子树最大值,我们要做的就是对所有内向树合法的概率求和
考虑这个概率是 ∏ 1 s i z e i \prod \frac{1}{size_i} ∏sizei1,而每次连出去一个奇数点相当将一个 1 s i z e \frac{1}{size} size1 改成 1,
令 d p i , j , k dp_{i,j,k} dpi,j,k 表示到 i i i 分了 j j j 段,子树大小为 k k k 的概率之和(这对应着连出去的边有 k k k 条),这里 1 ( k + i ) ! \frac{1}{(k+i)!} (k+i)!1 的概率最后算上,那么容易发现
d p i , j , k = ∑ d p l , j − 1 , k 1 2 ( i − l 2 ) + ∑ d p l , j − 1 , k − 1 ( ∑ t = 1 i − l ( k + i + t ) ( t − i + l ) ) + { ∑ d p l , j − 1 , k ( i − l + 1 2 ) − ∑ d p l , j − 1 , k − 1 ( ∑ t = 1 i − l ( k + i + t ) t ) } dp_{i,j,k}=\sum dp_{l,j-1,k}\frac{1}{2}\binom{i-l}{2}+\sum dp_{l,j-1,k-1}(\sum_{t=1}^{i-l}(k+i+t)(t-i+l))\\+\{\sum dp_{l,j-1,k}\binom{i-l+1}{2}-\sum dp_{l,j-1,k-1}(\sum_{t=1}^{i-l} (k+i+t)t)\} dpi,j,k=∑dpl,j−1,k21(2i−l)+∑dpl,j−1,k−1(t=1∑i−l(k+i+t)(t−i+l))+{∑dpl,j−1,k(2i−l+1)−∑dpl,j−1,k−1(t=1∑i−l(k+i+t)t)}
O ( n 4 ) O(n^4) O(n4),注意这里算的是所有排列中满足内向树合法的概率,而偶数位本身是排好序的,所以上述贡献要乘上 n ! n! n!, C o d e Code Code
C C C
- 回文自动机统计每个串的最长回文后缀的所有没有出现过的前缀,出现过的前缀存在一个最大长度 l e n len len,对应后缀数组上的一段区间,对这个长度二分即可, C o d e Code Code