Codeforces 785D 範德蒙恒等式

2021-09-16 12:08:14 字數 1044 閱讀 6265

1.題目鏈結。題目大意:乙個由括號構成的序列,讓你找到這個序列中有多少個好的子串行。乙個好的子串行的定義是這樣的:

2.分析:這個題是乙個組合數學問題。對於每乙個'(',我們統計它的左邊有多少個和它相同的,右邊有多少個和它相對的。也就是在這個左括號的左邊選出i個左括號,右邊選出i+1個右括號。(為什麼是i+1,因為當前的括號是左括號,加上左邊i個,所以右邊需要有i+1個與之匹配)所以我們列舉這個i,就可以知道當前這個位置對答案的貢獻。那麼當前這個位置對答案的貢獻就是:

根據組合數的性質:c(n,i)=c(n,n-i).我們可以把後邊的式子改寫成:

這個式子是可以用範德蒙恒等式化簡的:

範德蒙恒等式:

這個式子的證明很簡單,考慮乙個多項式:

其中x的k次冪:就是右邊的式子,如果我們把 這個多項式拆解成:

那麼對於右邊的式子:我們再考錄x的k次方,即可得到範德蒙恒等式。

那麼對於我們的上邊的式子可以做出一下化簡:

這樣對於每乙個點,我們在預處理之後,就可以o(1)的計算這個點對答案的貢獻。**如下:

#includeusing namespace std;

#define ll long long

const int maxn = 200010;

const int mod = 1e9 + 7;

char s[maxn];

int l[maxn], r[maxn];

#pragma warning(disable:4996)

ll qpow(ll a, ll b, ll mod)

return res;

}ll fac[maxn] = , inv[maxn] = , f[maxn] = ;

ll c(ll a, ll b)

void init()

}int main()

} printf("%lld\n", ans);

}

codeforces 785D 範德蒙恒等式

給了乙個括號序列。定義乙個合法的括號序列需要滿足下列幾個條件 1.非空,也就是長度 0 2.長度是偶數。3.前 n 2個字元是 4.後n 2個字元是 比如 是合法的,是不合法的 然後問這個括號序列有多少個子序列是合法的,位置不同就算不同。中的式子是c l i 1 r i r i 1 因為題解中的那個...

Codeforces 703D 樹狀陣列

codeforces 703d 題意 給1e6長度的區間,每個單位代表乙個數。給1e6個詢問,每次問區間內出現次數為偶數次的數異或和。思路 賽中的時候想莫隊水過去,結果pretest都沒過233 正解是樹狀陣列。首先假設是奇數次的話,就是乙個簡單字首和。現在偶數次,有乙個處理技巧就是記錄這個區間出現...

codeforces 912D 期望計算

題目鏈結 題意 在乙個n m的魚塘裡面放置k條魚,每次可以選定乙個r r的矩陣並獲得矩陣內魚的數量的分數。請問該如何在魚塘裡面放置魚,使得最後的期望得分最大。思路 直接通過列舉放置魚的位置計算期望得分明顯非常非常不現實,於是我們換一種計算思路我們去計算各點放置魚之後可以得到的期望得分,然後取前k大的...