标签:答案 大于 长度 err 前缀 推导 后缀 数位 组成
题意:有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)
顺便提一下,这是卡特兰数证明的思路
Hackerrank manasa-and-combinatorics(数学推导)
标签:答案 大于 长度 err 前缀 推导 后缀 数位 组成
原文地址:http://www.cnblogs.com/wmrv587/p/6547937.html