【題目鏈結】
【題目大意】
對於乙個串s,當它同時滿足如下條件時,它就是乙個01偏串:
1.只由0和1兩種符組成;
2.在s的每乙個字首中,0的個數不超過1的個數;
3.s中0的個數和1的個數相等。
現在給定01偏串s,請計算一下s在所有長度為n的01偏串中作為子串出現的次數的總和。
由於結果比較大,結果對1e9+7取餘後輸出。
【題解】
我們發現01偏串實際上等價於合法括號序列,
在合法括號序列中取出乙個合法括號序列之後剩下的一定也是乙個合法括號序列
所以我們計算n-lens的合法括號序列數,乘上s在n中的位置種類即可,
計算卡特蘭數時候因為模比較大,我們採用分段打表。
注意n-s<0||(n-s)%2==1條件的特判。
【**】
#include #include #include using namespace std;typedef long long ll;
const ll mod=1000000007,blk=500000;
const ll lst[2001]=;
int t,n,s;
char ss[1000010];
ll fact(ll x)
ll power(ll a,ll b)
ll c(ll a,ll b)
ll calc(int x)
int main()return 0;
}
hdu4828卡特蘭數
題目大意 有2行n列的長方形格仔,把1到2n這些數放進格仔裡面,使每行每列都遞增。也就是相當於,n個0和n個1排序,要求每個點的前面都要求0的個數大於等於1的個數,問排列的順序的種數。可以轉換為卡特蘭數,有遞推式 cn 1 4n 2 n 2 cn 具體卡特蘭數的資料 要用到逆元 include in...
卡特蘭數(HDU 1023)
卡特蘭數又稱卡塔蘭數,是組合數學中乙個常出現在各種計數問題中出現的數列。由以比利時的數學家歐仁 查理 卡塔蘭 1814 1894 命名。卡特蘭數 前幾項為 oeis中的數列a000108 1,1,2,5,14,42,132,429,1430,4862,16796,58786,208012,74290...
HDU 1134,卡特蘭數
此題考查的是卡特蘭數,由於卡特蘭數很大,所以考慮大數處理。卡特蘭數的前幾項為 h 0 1 h 1 1 h 2 2 h 3 5 卡特蘭數的遞推公式為 h n h n 1 4 n 2 n 1 非遞推公式為c 2n,n n 1 此題用遞推公式求解,並用到大數的乘法和大數的乘法處理,本題對卡特蘭數的前100...