A. D2T1
因为最终答案只需要大小为$n$的排列的返回值的期望。
我们并不关注排列内部的内容。
所以不妨设长度为$n$的排列的返回值的期望为$f_n$,长度为$n$的排列的逆序对个数为$g_n$。
那么有$f_n=\frac{\sum \limits_{i=0}^{n}\binom{n}{i}*f_i}{2^n}+g_n$。
显然随机排列中正序对和逆序对个数应当是相同的,并且二者相加为$\frac{n*(n-1)}{2}$,故$g_n=\frac{n*(n-1)}{4}$。
然而受到$D1T2$的启发,我们应当也可以想到$g_n$的另一个求法。
考虑从大到小插入每一个数。
那么插入第$i$个数的贡献为$\frac{\sum \limits_{j=0}^{i-1}j}{i}$,分别表示插入到第$j$个空位造成的逆序对贡献。
由此我们是可以推出上式的。
于是我们可以$O(n^2)$解出$f_n$,对$f_n$作前缀和后除$n$即为$ans_n$。
显然有了这个算法后,我们应当打表。
然后就会发现$f_n$这个函数就非常好,对它邻项作差一次立刻变成了等差数列。
也就是说它必是二次函数,所以$f_n$的前缀和必为三次函数。
所以设$s_n$为$f_n$的前缀和,$s_n=a*x^3+b*x^2+c*x+d$。
分别代入$x=1,2,3,4$,可以解出$a,b,c,d$,除$n$之后我们就得到了答案。
$AC$之后重新看题,考虑式子的实际含义。
不妨考虑每个逆序对,设它的贡献为$x$。
那么有$x=\frac{1}{4}*x+1$,可解得$x=\frac{4}{3}$。
由逆序对的期望个数$\frac{n*(n-1)}{4}$,二者相乘可得$f_n=\frac{n*(n-1)}{3}$。
用自然数幂和公式求和可得到我们刚才暴力消元解出的答案。
B. D2T2
看完题并没有思路,只会大力枚举,用哈希表骗分。
正解要枚举后缀与前缀之间的断点,这个做法确实巧妙多了。
用$trie$树暴力匹配,复杂度就做到$O(n*len)$了。
正解的做法更加巧妙一些:
首先建前后缀共两棵$trie$树,$trie$树上的节点$sz$对前缀求和。
将两棵$trie$树上节点对应的哈希值分别插入哈希表中,映射到对应的前缀求和后的$sz$。
之后可以对原字符序列进行二分,通过哈希表中能否查询到值$check$,求出最靠左的左端点和最靠右的右端点。
二者相乘是该断点贡献的答案。
C. D2T3
部分分似乎确实在提示,要满足题中的要求,会存在一些特殊性质。
当$k$比较小的时候,答案可以大力分类讨论。
当$k$比较大,答案一定只表现为一种情况:$k$个皇后在同一线上。
题中的模数比较小,所以可以用$lucas$定理搞。
为了求和一些奇怪的式子,我们还需要大力拆式子,用自然数幂和讨论。
原文地址:https://www.cnblogs.com/skyh/p/11722492.html