給定乙個長度為n 只包含左括號和右括號的序列,求每乙個位置經過的合法子串有多少個。
空串是乙個合法的串,如果a 和b 都是合法的串,那麼(a) 和ab 都是合法的串。 令a
ns[i
] 為第
i 位的答案,對於每組資料,輸出乙個整數an
s=∑1
n(an
s[i]
∗imo
d p)
,p=1
9+7
n≤10
6 資料組數t≤
10 t
ime
limi
ts:1000ms
memory
limi
ts:512m
我們可以先用棧 處理出每對配對的括號(從左到右,左括號入棧,右括號彈出棧頂與之配對),然後用簡單的遞推計算即可。
#include
#include
#include
using
namespace
std;
typedef
long
long ll;
const
int n = 1e6 + 10;
const ll p = 1e9 + 7;
int n,inf;
int a[n],l[n],r[n];
int st[n],next[n],last[n];
char in[n];
ll ans,t[n];
void init()
void pre()
void solve()
for (int i = 1;i <= n;i ++)
for (int i = 1;i <= n;i ++) t[i] = r[i] + l[i];
for (int i = 1;i <= n;i ++) t[i] += t[i-1];
ll ans = 0;
for (int i = 1;i <= n;i ++) ans += 1ll * i * t[i] % p;
printf("%lld\n",ans);
}int main()
}
已經沒有什麼好害怕的了
description 小y 最近開始學習演算法姿勢,但是因為小r 非常bb,給了她很多b6 題,所以她覺得自己已經沒有什麼前途了。於是小r 給了她一些稍微簡單的題,讓她覺得已經沒有什麼好害怕的了,其中一道是這樣的 給定乙個長度為n 只包含左括號和右括號的序列,現在小r 想要知道經過每乙個位置的合法...
題解 已經沒有什麼好害怕的了
套路滿滿的樣子 o o 實際上在發現 比.多 k 實際上就是要求糖果能量大於藥片能量的組數為 k 時,這題的指向性就很明確了。按照慣例來說,我們應當試圖用 至少 來求出 恰好 的方案數。先考慮容斥的部分 如果可以求出每乙個糖果集合 t 使得 t 中的所有糖果在最後的組合方案中能量都能夠大於所匹配的藥...
bzoj 3622 已經沒有什麼好害怕的了
我好害怕這種題 兩個陣列排序後,處理出next i 表示滿足tang i yao j 的最大的j。f i j 前i種糖果,有j個糖比藥多,不考慮剩餘情況的方案數 也就是剩餘n j個糖果的放法算一種,最後乘上階乘。f i j f i 1 j f i 1 j 1 max next i j 1,0 開始忘...