題目位址
組合數學
答案是 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 輸出描述 對於每個測試用例,輸...