csp-s模拟82

T1:
  考虑一个逆序对的贡献
  设(f_i)表示一个逆序对对长度为i的序列的贡献
(f_i = (sum_{j=2}^n(^{n-2}_{j-2})f_j )/2^n)
  最后的答案为:((sum_{i=1}^n (^i_2)(^i_2)(i-2)! / i! *f_i )/n)
  将f的式子移一下项即可得到递推式,打个表后会发现当(i>1)(f_i=4/3)
  将(f_i=4/3)带入答案的式子,化简即可。
 
T2:
  枚举分界点统计以i结尾的后缀个数((f_i))和以i开头的前缀个数((g_i))
(ans = sum_{i=1}^{n-1}f_i*g_{i+1})
  考虑如何快速统计
  对所有串和反串分别建出tire树,在每个节点统计该点到根的hash值,存到hash表里
  再求出tire树每个节点包含了多少前缀/后缀
  再预处理串(S)(S^R)的hash值
  枚举分界点,二分找到最长前缀匹配和最长后缀匹配
  利用tire树上节点统计的信息即可快速求出f和g
 
T3:
  发现当皇后的个数大于5之后,合法的方案就只有将她们排成一排
  分别计算一下横竖斜三种情况即可
  小于等于5时,发现并没有一个通用的公式,那就分5种情况讨论
  1和2比较简单,就不赘述了
  3(3种):

  4(4种):

  5(2种):

  推推式子就好了

原文地址:https://www.cnblogs.com/Gkeng/p/11833400.html