Hackerrank manasa-and-combinatorics(数学推导)

题意:有n个字符A,2n个字符B,问你能用这3n个字母组成多少种字符串,使得组成的字符串所有前缀与后缀的B的数目都大于等于A的数目,对答案mod 99991

分析:类似卡特兰数

   ans=总方案数-存在前缀不满足-存在后缀不满足+存在前缀后缀同时不满足

   考虑前缀不满足,那么说明在某个第一个奇数位2m+1,之前有m+1个A,m个B,后面3n-2m-1个位置上有n-m-1个A和2n-m个B

   如果把后面的A和B同时取反,那么就是n-m-1个B和2n-m个A,总共就是n-1个B和2n+1个A

   我们考虑一个长度为3n的序列,其中有n-1个B,2n+1个A,那么一种这样的序列必定对应原问题的一个不合法序列

   所以对于存在前缀不满足的,ans1=C(3n,n-1)

   同理,后缀是等价的,ans2=C(3n,n-1)

   对于前缀和后缀同时不存在的,同时头尾考虑两个奇数位,将中间的数取反,答案是C(3n,n-2)

   所以最后结果ans=C(3n,n)-2*C(3n,n-1)+C(3n,n-2)

   顺便提一下,这是卡特兰数证明的思路

原文地址:https://www.cnblogs.com/wmrv587/p/6547937.html