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

Posted 人活着就是为了Chelly

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

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

以上是关于Hackerrank manasa-and-combinatorics(数学推导)的主要内容,如果未能解决你的问题,请参考以下文章

不可分子集 - Hackerrank

堆栈和优化——来自hackerrank的例子

Hackerrank:Sherlock 和 Anagrams [关闭]

如何清除 Hackerrank 动态数组运行时错误?

HackerRank 天气观测站 5

没有指针的 C++ 分段错误 (HackerRank)