jzoj4209 已經沒有什麼好害怕的了 差分

2021-09-10 02:28:03 字數 1220 閱讀 4673

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...