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种):

  推推式子就好了

posted @ 2019-11-11 11:15  G_keng  阅读(103)  评论(0编辑  收藏  举报