牛客網 E 弦 初見卡特蘭數

2021-10-05 22:58:10 字數 1398 閱讀 4669

題目位址

組合數學

答案是 2^n / (n + 1)!。概率可以通過合法方案數/總方案數來計算。合法方案數 f(n)=σf(i) * f(n-i-1), 即為卡特蘭數,故 f(n)=c(2n, n) / (n + 1)。總方案數為 c(2n, 2) * c(2n – 2, 2) … c(2, 2) / n! = (2n)! / n! / 2^n。兩者相除即為答案。除法取模的話用逆元來計算(即費馬小定理)。 總複雜度o(n)。

卡特蘭數講解

//made by y_is_sunshine;

//#include

//#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define pb push_back

#define pf push_front

#define inf 0x3f3f3f3f

#define maxn (int) 2e6 + 7

#define all(a) a.begin(), a.end()

typedef

long

long ll;

const ll mod =

1e9+7;

const

double pi =

acos(-

1);using

namespace std;

int n, m, k, t;

long

long

fpow

(long

long a,

long

long b)

//quick_pow(a, p - 2); 逆元 mod;

signed

main

(void

) cout <<

fpow(2

, n)

*fpow

(ans, mod -2)

% mod <<

'\n'

;#ifdef sunshine

freopen

("con"

,"r"

,stdin);

system

("pause");

#endif

return0;

}

牛客網演算法學習筆記 卡特蘭數相關

說實話,卡特蘭數我自己基本沒什麼深刻的理解,只能做一些相關的簡單的題目而已。所以這裡只記錄題目和 n個數進出棧的順序有多少種?假設棧的容量無限大。給定乙個整數n,請返回所求的進出棧順序個數。保證結果在int範圍內。測試樣例 1返回 1 2n個人排隊買票,n個人拿5塊錢,n個人拿10塊錢,票價是5塊錢...

牛客網 數串

設有n個正整數,將他們連線成一排,組成乙個最大的多位整數。如 n 3時,3個整數13,312,343,連成的最大整數為34331213。如 n 4時,4個整數7,13,4,246連線成的最大整數為7424613。有多組測試樣例,每組測試樣例包含兩行,第一行為乙個整數n n 100 第二行包含n個數 ...

牛客網 數對

題目描述 牛牛以前在老師那裡得到了乙個正整數數對 x,y 牛牛忘記他們具體是多少了。但是牛牛記得老師告訴過他x和y均不大於n,並且x除以y的餘數大於等於k。牛牛希望你能幫他計算一共有多少個可能的數對。輸入描述 輸入包括兩個正整數n,k 1 n 10 5,0 k n 1 輸出描述 對於每個測試用例,輸...