ans
ians_i
ansi
表示包含字元i
ii的括號匹配子串個數
求∑ i=
1n(a
nsi∗
imod
(1e9
+7))
\sum_^n(ans_i*i\mod (1e9+7))
i=1∑n
(ans
i∗i
mod(
1e9+
7))計算出每個匹配括號的前乙個括號位置和後乙個括號位置。
乙個差分陣列
先計算加的,其實對於每一些同級括號,差分陣列就按順序從1到k
kk(k表示括號個數)
減的同理
舉個例子
s ss(
(()))(
(()))e
nd
endendad
dadd
add102
00r ed
uc
ereduce
reduce
0010
2
#include
#include
#include
#include
#define ll long long
using
namespace std;
const ll xjq=
1e9+
7,n=
1e6+10;
char s[n]
;stack<
int> ss;
ll n,t,last[n]
,next[n]
,r[n]
,l[n]
,sum[n]
,ans;
intmain()
for(ll i=n+
1;i>=
1;i--
)for
(ll i=
0;i<=n;i++
)for
(ll i=
1;i<=n;i++
) sum[i]
=sum[i-1]
+l[i]
+r[i]
,ans+
=sum[i]
*i%xjq;
printf
("%lld\n"
,ans);}
}
Jzoj4209 已經沒有什麼好害怕的了
小y 最近開始學習演算法姿勢,但是因為小r 非常bb,給了她很多b6 題,所以她覺得自己已經沒有什麼前途了。於是小r 給了她一些稍微簡單的題,讓她覺得已經沒有什麼好害怕的了,其中一道是這樣的 給定乙個長度為n 只包含左括號和右括號的序列,現在小r 想要知道經過每乙個位置的合法子串有多少個。空串是乙個...
Jzoj4209 已經沒有什麼好害怕的了
小y 最近開始學習演算法姿勢,但是因為小r 非常bb,給了她很多b6 題,所以她覺得自己已經沒有什麼前途了。於是小r 給了她一些稍微簡單的題,讓她覺得已經沒有什麼好害怕的了,其中一道是這樣的 給定乙個長度為n 只包含左括號和右括號的序列,現在小r 想要知道經過每乙個位置的合法子串有多少個。空串是乙個...
已經沒有什麼好害怕的了
給定乙個長度為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...