Hackerrank manasa-and-combinatorics(数学推导)
生活随笔
收集整理的這篇文章主要介紹了
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
總結
以上是生活随笔為你收集整理的Hackerrank manasa-and-combinatorics(数学推导)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编程题--进制转换
- 下一篇: HISTFILESIZE与HISTSIZ