題解:
生成乙個長度為1-n的序列,在l,r區間中選擇數字。那麼有m=r-l+1個數字可以選擇,每個數字選擇的次數加起來為n,所以這是明顯的插空法。為了讓每個數字都一定會被選一次,所以左右全部+1,接下裡就是利用公式合併再盧卡斯一下了。
#pragma gcc optimize(2)
#include
#define int long long
using
namespace std;
typedef
long
long ll;
const
int mod=
1e6+3;
const
int n=
1e6+7;
int fac[n]
,inv[n]
;ll q_pow
(int a,
int b)
return res;
}void
init()
return;}
ll c
(ll a,ll b)
ll lucas
(ll n,ll m)
void
solve
(int n,
int l,
int r)
signed
main()
}
組合數學 求組合數
對於求組合數,要根據所給資料範圍來選擇合適的演算法 這道題中所給的資料範圍適合用打表的方法直接暴力求解 先用4e6的複雜度預處理出所有的情況,再用1e4的複雜度完成詢問即可 include using namespace std const int n 2010 const int mod 1e9 ...
排列組合數學 子串行
題目描述 給定乙個小寫字母字串t 求有多少長度為m的小寫字母字串s滿足,t是s的乙個子串行 不需要連續 輸入描述 第一行乙個字串t 第二行乙個正整數m 輸出描述 輸出答案對109 7取模的值 示例1輸入a2 輸出51 說明長度為2的裡面有a的串有51種 備註 1 t m 105 列舉終點,前面的除了...
合法括號序列(dp 組合數學)
鍵盤上有左括號 右括號 和退格鍵 共三個鍵。牛牛希望按鍵n次,使得輸入的字串恰好乙個合法的括號序列。每按一次左括號 字串末尾追加乙個左括號 每按一次右括號 字串末尾追加乙個右括號 每按一次退格鍵 會刪掉字串的最後乙個字元,特別的,如果字串為空,牛牛也可以按退格,但是什麼都不會發生。輸出方案數對p取模...